Ruby on rails 3.1 rails 3选项\u来自\u集合\u,用于选择带有选定空值的\u

Ruby on rails 3.1 rails 3选项\u来自\u集合\u,用于选择带有选定空值的\u,ruby-on-rails-3.1,form-helpers,Ruby On Rails 3.1,Form Helpers,当所选值为nil时,我遇到了一些有关\u select的\u集合\u中的选项\u的问题 我有一个用户模型: class User < ActiveRecord::Base attr_accessible :email, :password, :password_confirmation, :remember_me, :username, :locale end class用户

当所选值为nil时,我遇到了一些有关\u select的\u集合\u中的选项\u的问题

我有一个用户模型:

class User < ActiveRecord::Base
  attr_accessible :email, :password, :password_confirmation, :remember_me, :username, :locale
end
class用户
预订一张:

class Reservation < ActiveRecord::Base
  belongs_to :user
end
类保留
在“预订添加/编辑”页面中,有一个选择,其中用户将与预订关联:

<%= select_tag('user_id', 
  options_from_collection_for_select(@users, :id, :username, @reservation.user.id)) %>

当@reservation.user.id不是nil时,这在编辑页面中起作用,但我在添加页面中得到nil错误。 现在我检查@reservation.user.id是否为nil,并根据是否为nil输入所选值;这是可行的,但我不喜欢这个解决方案


如何解决这个问题?

解决这个问题的方法可能有很多:

至少,您必须为OFCF的最后一个参数设置一个条件

options_from_collection_for_select(
  @users, :id, :username, 
  @reservation.user.blank? ? 0 :  @reservation.user.id)
然后,在创建操作中,您必须预先添加一个适当的哈希:

@users = User.all
@users.insert(0, {:id=>0,:username=>'PLEASE SELECT A USER'})
然后,在保存预订之前,必须验证select返回的值不是0


至少有三到四件事我可以想到解决这个问题

谢谢RadBrad,我一直在寻找这种解决方案(我是Ruby/RoR新手)来检查
@reservation.user.id
选项中是否为空(来自\u collection\u,用于\u select
)。这解决了我的问题:
@reservation.user.id.nil?“”:@reservation.user.id
无需添加其他内容。我上面的评论中有一个输入错误;正确的检查方法是:
@reservation.user.nil?“”:@reservation.user.id