我想将两个值保存到DB(用户ID和用户名),只有一个表单选择字段。这甚至可能吗?这是我到目前为止所得到的:
<%= f.collection_select(:user_id, User.where(brand: current_user.brand), :id, :name, {prompt:true}, {class: 'form-control'}) %>
只将user_id(from:id)保存到DB。你如何扩展它以将user_name(from:name)保存到DB?
<%= f.collection_select(:user_id, :user_name, User.where(brand: current_user.brand), :id, :name, {prompt:true}, {class: 'form-control'}) %>
不起作用。
非常感谢提前!
答案 0 :(得分:1)
您实际上只需要保存user_id以引用所有其他属性。
我喜欢使用options_for_select
并在保存id时将其传递给二维数组。第一个值将是用户看到的值。第二个值将是我实际保存的值。在这种情况下,我猜您希望用户看到username
,但您希望实际保存user_id
。
这看起来像是:
<%= f.select :user_id, options_for_select(User.choices) %>
然后在user.rb中:
def self.choices
choices = []
User.find_each { |u| choices << [u.username, u.id] }
choices
end
您无需保存这两个值,因为您始终可以使用id访问保存在用户上的任何属性。
编辑:
根据您的评论,您实际上根本不需要选择框。只需在订单控制器create action
中设置它们:
@order.username = current_user.username
@order.user_id = current_user.id
if @order.save
# etc
但是,如果您将user_id作为外键,则不需要保存用户名。使用外键,您始终可以获取订单实例并说出order.user.username
并获取该user_id的相应用户名。