当前位置:  开发笔记 > 后端 > 正文

如何在rails上的ruby中显示父表列名?

如何解决《如何在rails上的ruby中显示父表列名?》经验,为你挑选了1个好方法。

如何在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

谢谢



1> Richard Peck..:
<% @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_idforeign keyposts表格内部.

外键是一个关系数据库功能 - 它允许数据库通过它们提供的键来"引用"其他表中的数据:

在此输入图像描述

在您的情况下,company_id表示您的帖子idCompany记录.你遇到的问题是,当直接调用它时,你将得到一个integer返回的(company_idid).

要拉取关联对象(IE @post.company),您需要依赖ActiveRecord来填充它...这就是为什么您应该调用@post.company(IE post belongs_to company)来访问其name等属性的原因:

@post.company_id #-> 1
@post.company.company_name #-> "Test"

使用delegate将您的特定请求推送到company对象,允许您直接调用@post对象上定义的方法.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有