通过 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 查询引入列表列表。
我在向我的列表模型表达用户的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 查询引入列表列表。