使用参数渲染新动作

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]

【讨论】:

以上是关于使用参数渲染新动作的主要内容,如果未能解决你的问题,请参考以下文章

渲染:带参数的动作

如何在rails的渲染动作中传递参数

特定操作的渲染布局

画布渲染一次,在所有动作之后

渲染:动作和渲染:模板之间的区别

JSF 2.0 复合组件 - ajax 渲染参数 OUTSIDE 组件定义