表单选择保存多个值

时间:2016-03-30 12:00:34

标签: ruby-on-rails

我想将两个值保存到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'}) %>

不起作用。

非常感谢提前!

1 个答案:

答案 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的相应用户名。