使用参数渲染新动作
Posted
技术标签:
【中文标题】使用参数渲染新动作【英文标题】:Render new action with params 【发布时间】:2014-06-07 09:34:24 【问题描述】:我的表单中有基于 ajax 的选择,我的表单:
= form_for @car, :html => :id => "new-car-form" do |f|
- if @car.errors.any?
- if @car.errors.any?
.flash-notice
%b= "Ошибки в полях: #@car.errors.count ошибка(и)"
%ul
- @car.errors.each do |attr,msg|
%li= msg
.field
= f.label :vehicle_manufacturer_id, "Марка"
= f.select :vehicle_manufacturer_id, options_from_collection_for_select(VehicleManufacturer.all, :id, :name, @car.vehicle_manufacturer_id), :prompt => "Выберите марку", required: true, id: "manufacturer-select"
.field
= f.label :vehicle_model_id, "Модель"
#models-area
= render :partial => 'models', :object => @models
和部分:
- if @models.present?
= select_tag "by_model", options_from_collection_for_select(@models, "id", "name", selected: @selected), :prompt => "Выберите модель", required: true, id: "model-select"
- else
= select_tag "by_model", nil, :prompt => "Выберите модель", required: true, id: "model-select", disabled: true
我进行了测试,并且可能遇到这样的情况:当我没有输入内容并提交表单时 - 我看到验证错误并且我的选择值为 nil,但是如何以及在哪个操作中附加这样的内容:
@models = VehicleModel.where(manufacturer_id: @car.vehicle_manufacturer_id)
@selected = @car.vehicle_model_id
我使用 rails4。
我做错了什么以及如何解决我的问题?
【问题讨论】:
【参考方案1】:尝试将表单变量传递给部分;因为select_tag
本身无法将其值与form_for @car
关联起来。
= render :partial => 'models', :object => @models, :form => f
那么,在局部:
= form.select "by_model ..."
更具体地说,表单顶部的form_for @car
子句表示“提交时将这个块中的所有内容包装在一个‘汽车’对象中”。所以现在你提交的表单有这样的值:
car[vehicle_manufacturer_id]
car[vehicle_model_id]
by_model
但您需要像其他人一样将最后一个 by_model
属性包装在 car 数组中:
car[vehicle_manufacturer_id]
car[vehicle_model_id]
car[by_model]
【讨论】:
以上是关于使用参数渲染新动作的主要内容,如果未能解决你的问题,请参考以下文章