导轨FormBuilder选择设置与“奇数”关联的选定值

问题描述:

我有这个稍微左侧的中心情况,我无法工作。最简单的问题是,我使用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

的要求:

不知道是什么问题,没有看到错误,但解决您的选择问题,添加选定东西向options_from_collection_for_select方法,在下面的结构:options_from_collection_for_select(收集,值,标签,selected_id)

这是现在要做到这一点更简单的方法:

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