如何在rails上的ruby中显示父表列名?
我想显示位于company_id的company_name,如1,post是子表名,其中是外键company_id,我想替换company_name位于company_id.
这是我的工作 -
控制器:
@post = Post.paginate(page: params[:page], :per_page => 10).order('job_view_count DESC')
视图:
<% @post.each do |p| %> <%= p.jpost_title %> <%= p.company_id %> # I want to show company_name on this place <%= p.post_location %> <% end %>
用户模型:
class User< ActiveRecord::Base has_many :posts, :foreign_key => :company_id has_many :companies end class Post < ActiveRecord::Base belongs_to :user belongs_to :company end
谢谢
<% @post.each do |p| %> <%= p.jpost_title %> <%= p.company.company_name %> <%= p.post_location %> <% end %>
为了保持干燥并停止demeter问题的规律,你需要.delegate
在你的Post
模型中使用:
#app/models/post.rb class Post < ActiveRecord::Base belongs_to :company delegate :company_name, to: :company #-> @post.company_name end
这将允许您使用:
<% @post.each do |p| %> <%= p.jpost_title %> <%= p.company_name %> <%= p.post_location %> <% end %>
为了给你上下文(让你理解问题/解决方案),company_id
就foreign key
在posts
表格内部.
外键是一个关系数据库功能 - 它允许数据库通过它们提供的键来"引用"其他表中的数据:
在您的情况下,company_id
表示您的帖子id
的Company
记录.你遇到的问题是,当直接调用它时,你将得到一个integer
返回的(company_id
id).
要拉取关联对象(IE @post.company
),您需要依赖ActiveRecord来填充它...这就是为什么您应该调用@post.company
(IE post belongs_to company
)来访问其name
等属性的原因:
@post.company_id #-> 1 @post.company.company_name #-> "Test"
使用delegate
将您的特定请求推送到company
对象,允许您直接调用@post
对象上定义的方法.