У меня есть модель поста, а затем эталонная модель, которая служит моделью для отношений между двумя постами.Таким образом, один пост (скажем, 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