通过 id 将用户关联到模型

Associating a User to model via id

我在向我的列表模型表达用户的link年龄时遇到了一些困难。

我在关联 designer_id(添加到 listing_params 作为私有控制器方法)时设置了一个 Rails 表单,该表单会将 link 选定用户关联到创建时列出模型:

#migration
add_column :listings, :designer_id, :integer

_form.html.erb
<%= collection_select :listing, :designer_id, @account.users, :id, :name, prompt: "Choose..." %>

检查控制台,表单返回正确的用户 ID designer_id。成功!

我现在需要做的是使用列表方法访问用户名,但我被卡住了 - 问题主要是将获取的 ID 转换为引用的用户:

 #listing.rb

  def designer
    self.designer_id == User.find_by_id(params[:name])
    if self.designer_id = nil
      return "N/A"
    else   
      return "#{User.name}"
  end

非常感谢!

在迁移中,如果你至少处于 rails 4,你就可以做到

add_reference(:listings, :designer) 你可能需要做 add_reference(:listings, :designer, :foreign_key => { to_table: 'users'}

我经常使用的其他选项 add_reference(:listings, :designer, :foreign_key => { to_table: 'users'} index: true, limit: 8)

除了迁移,您可以在模型中执行此操作。

class Listing
  belongs_to :designer, class_name: 'User', inverse_of: :listings


end

并在用户中

class User
  has_many :listings, inverse_of: :designer, dependent: :destroy
end

然后获取用户名,

listing.designer.name

如果您在控制器中执行此操作,您将需要预加载关联,这样您就不会将 n+1 查询引入列表列表。