ruby-on-rails - 循环在 Rails 中有很多直通关系
问题描述
我有一个 Post 模型,然后是一个 Reference 模型,用作两个 Post 之间关系的模型。因此,单个帖子(例如,POST A)将有一些它所引用的“推荐”帖子(POST B、POST C 等)......而且它也会有一些“推荐”帖子(POST D、POST E、等)提到它。从 POST A 的“显示”视图来看,我只是试图循环显示所有“推荐”帖子以及它上方和下方的所有“推荐”帖子。我想使用参考关系模型来做到这一点。在创建帖子时成功创建了引用和引用关系/引用关系,但我无法找出正确的代码放置在视图中以在列表中显示这些相关的帖子标题......
参考资料.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
Posts/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 %>
但不幸的是,它只显示为每个关系循环的原始帖子标题(而不是引用或被引用帖子的标题。
所以它只是遍历原始帖子的标题,如下所示:
- 后一个
- 后一个
- 后一个
更新 2:
架构.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
解决方案
在控制器中,您可以将相关记录加载到实例变量中,然后从控制器循环它们。
控制器:
def show
@title = "Post Profile"
@post = Post.find(params[:id])
@referring = @post.referring
@referred = @post.referred
end
看法:
<ul>
<% @referring.each do |referring_post| %>
<li><%= referring_post.title %></li>
<% end %>
</ul>
你可以用@referred
.
推荐阅读
- javascript - 除非您在 HTML(或 XHTML)中单击它,否则如何隐藏一个段落
- mapbox-gl-js - 如何保持 mapbox-gl-draw 功能与透视对齐?
- python - 如何从“bs4.element.Tag”中获取特定项目
- python - 无法选择 Kendo UI + Angular JS 下拉列表 python selenium
- autodesk-forge - 如何创建停靠面板(在较新版本的 Autodesk forge 查看器中)
- excel - 如何获取excel VBA中下拉列表引用的范围名称
- tensorflow - 可以导入 tensorflow_addons
- authentication - 如何检查 /authentication 路由是否被使用?
- java - 如何在android中设置pojo类的值,,,..在下面的代码中如何设置sportMembership和ExtraField Class对象的值
- ubuntu - rtl8822be wifi 驱动程序 ubuntu 20.04 hp 15-da1009ne