Loop through имеет много сквозных отношений в Rails - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть модель поста, а затем эталонная модель, которая служит моделью для отношений между двумя постами.Таким образом, один пост (скажем, POST A) будет иметь несколько «упомянутых» постов (POST B, POST C и т. Д.), На которые он ссылался ... и также будет иметь несколько «ссылающихся» постов (POST D, POST E,и т. д.) которые ссылались на это.С точки зрения POST A 'show', я просто пытаюсь просмотреть и просмотреть все "реферальные" посты и все "реферальные" посты выше и ниже.Я хочу использовать модель ссылочных отношений, чтобы сделать это.Ссылки & refer_relationships / referring_relationships создаются успешно, когда создается сообщение, но я не могу определить правильный код для размещения в представлении, чтобы отображать эти связанные заголовки сообщений в списке ... любая помощь будет оценена, что для каждогоУпомянутый ниже цикл должен выглядеть следующим образом:

Reference.rb

class Reference < ApplicationRecord 
  belongs_to :referred, class_name: "Post"
  belongs_to :referring, class_name: "Post"
  validates :referred_id, presence: true
  validates :referring_id, presence: true
end

Post.rb

class Post < ApplicationRecord

  has_many :referred_relationships, foreign_key: "referred_id", 
                                  class_name:  "Reference",
                                  dependent:   :destroy
  has_many :referred, through: :referred_relationships, source: :referred

  has_many :referring_relationships, foreign_key: "referring_id", 
                                  class_name:  "Reference",
                                  dependent:   :destroy
  has_many :referring, through: :referring_relationships, source: :referring
end

Posts_Controller.rb

def show
  @title = "Post Profile"
  @post = Post.find(params[:id])
end

def post_params
  params.require(:post).permit(:title, :referred_id)
end

Сообщений/show.html.erb (Страница профиля сообщений)

WHAT CODE WOULD GO HERE TO LOOP THROUGH REFERRING POSTS SHOWING POST TITLES???

<div class="postA">              
     <!-- Title -->
    <h2>
      Post <%= @post.id %>
    </h2>

    !-- Content -->
    <p class="text-muted">
      "<%= @post.title %>"
    </p>
</div>

WHAT CODE WOULD GO HERE TO LOOP THROUGH REFERRED POSTS SHOWING POST TITLES???

ОБНОВЛЕНИЕ:

Спасибо, я попробовал то, что вы предложили, как показано ниже:

 <% if @post.referred.any? %>

            <div class="card">

            <% @referred.each do |referred_post| %>
              <p><%= referred_post.title %></p>
            <% end %>

              <br clear="all">

            </div>

      <% else %>

            <p>no relationships exist</p>

     <% end %>

Нок сожалению, он показывает только заголовок исходного сообщения, зацикленный для каждого отношения (в отличие от заголовка ссылающейся или упоминаемой публикации.

Так что он просто просматривает заголовок исходного сообщения, как показано здесь:

  • Сообщение A
  • Сообщение A
  • Сообщение A

ОБНОВЛЕНИЕ 2:

Schema.rb:

create_table "posts", force: :cascade do |t|
    t.string "title"
    t.bigint "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "url"
    t.index ["user_id"], name: "index_posts_on_user_id"
  end

create_table "references", force: :cascade do |t|
    t.integer "referred_id"
    t.integer "referring_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["referred_id", "referring_id"], name: "index_references_on_referred_id_and_referring_id", unique: true
    t.index ["referred_id"], name: "index_references_on_referred_id"
    t.index ["referring_id"], name: "index_references_on_referring_id"
  end

1 Ответ

0 голосов
/ 01 декабря 2018

В контроллере вы можете загрузить соответствующие записи в переменную экземпляра, а затем просмотреть их из контроллера.

controller:

def show
  @title = "Post Profile"
  @post = Post.find(params[:id])
  @referring = @post.referring
  @referred = @post.referred
end

view:

<ul>
<% @referring.each do |referring_post| %>
  <li><%= referring_post.title %></li>
<% end %>
</ul>

Вы можете сделать то же самое с @referred.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...