2011-09-03 86 views
1

我有這個稍微左側的中心情況,我無法工作。最簡單的問題是,我使用has_one/belongs_to關聯來構建此選擇,並且它填充正常,並在提交上返回有效值,但如果提交由於某種原因失敗(例如,不同的輸入驗證失敗)使用錯誤消息重新繪製,選擇默認爲列表中的第一個值,而不是所選的一個......以下是一些上下文。導軌FormBuilder選擇設置與「奇數」關聯的選定值

我有以下兩種型號。第一個是,我從一個PHP應用程序繼承並有「玩好」與所以它沒有遵循Rails約定表:

class Listing < ActiveRecord::Base 
    set_primary_key :lid 
    has_one :site 
end 

class Site < ActiveRecord::Base 
    belongs_to :listing 
end 

你可以看到我有過一個小圈跳轉到支付的事實該遺留表使用「蓋子」而不是「id」作爲其主鍵。

在我看來,我有這樣的形式選擇使用::的ActionView ::助手:: FormBuilder選擇:

.field 
    .left.form-label 
     = f.label :listing 
    .left.form-field 
     = f.select(:listing_id, options_from_collection_for_select(Listing.all.sort {|a,b| a.address <=> b.address}, :lid, :address), :prompt => "Please select an address", { :selected => @site.listing_id }) 

當我做了提交,並返回其他一些零散的原因的錯誤,選擇是設置爲列表中的第一個選項,而不是用戶實際選擇的那個。

其他一些環境。這裏是進入PARAMS的保存是註定要失敗的第一:

Parameters: {"utf8"=>"✓", 
    "authenticity_token"=>"X/yqRO0VA0/3GrkGT0sc2KVPd4sVLF2Nd/vnjQM7GOI=", "site"=> 
    {"domain"=>"butterballasshat.info", "listing_id"=>"937", "user_id"=>"21", 
    "description"=>"asdf"}, "commit"=>"Save"} 

,這裏是相關的控制器代碼:

def create 
    @site = Site.new(params[:site]) 

    respond_to do |format| 
    if success and @site.save 
     format.html { redirect_to(sites_url, :notice => 'Site was successfully created.') } 
     format.xml { render :xml => sites_url, :status => :created, :location => @site } 
    else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @site.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

如果您需要任何其他信息,環繞我的問題,你的頭我很樂意爲它...

+1

不知道是什麼問題沒有看到錯誤,但要解決您選擇的問題,請將所選內容添加到*** options_from_collection_for_select ***方法中,結構如下:*** options_from_collection_for_select(collection,value,label,selected_id)*** –

+0

絕對完美。我試圖讓它進入選擇而不是選項生成器。萬分感謝。把答案放在答案中,我會接受它... – jaydel

回答

2

的要求:

不知道是什麼問題,沒有看到錯誤,但解決您的選擇問題,添加選定東西向options_from_collection_for_select方法,在下面的結構:options_from_collection_for_select(收集,值,標籤,selected_id)

0

這是現在要做到這一點更簡單的方法:

<%= f.collection_select(:city_id, City.all, :id, :name) %>