2012-05-02 31 views
0

當選中的值爲nil時,我遇到了option_from_collection_for_select的一些問題。rails 3 option_from_collection_for_select與選定的空值

我有用戶模式:

class User < ActiveRecord::Base 
    attr_accessible :email, :password, :password_confirmation, :remember_me, :username, :locale 
end 

和預約之一:

class Reservation < ActiveRecord::Base 
    belongs_to :user 
end 

在預約添加/編輯頁面有一個選擇與用戶goiing要與保留相關聯:

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

這工作在編輯頁面時@ reservation.user.id不是零,但我得到在添加頁面中沒有錯誤。 只是現在我檢查@ reservation.user.id是否爲零,我把選擇的值取決於是否爲零;這工作,但我不喜歡這個解決方案。

我該如何解決這個問題?

回答

0

有可能解決這個很多:

最起碼,你得把條件爲ofcfs的最後一個參數。

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'}) 

然後你必須驗證從選擇返回的值不爲0之前你保存一個預訂。

有至少三個或其他四件事情,我能想到的工作解決此

+0

謝謝RadBrad的,我一直在尋找這種解決方案(我是新來的Ruby/RoR的)檢查是否'@reservation .user.id'在'options_from_collection_for_select'中爲null。這解決了我的問題:'@ reservation.user.id.nil? ? 「」:@ reservation.user.id',無需添加別的東西 –

+0

在我上面的評論中有一個錯字;正確的方法是: '@ reservation.user.nil? ? 「」:@ reservation.user.id' –