【问题标题】: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。

我做错了什么以及如何解决我的问题?

【问题讨论】:

    标签: ruby-on-rails ajax


    【解决方案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]
    

    【讨论】:

      猜你喜欢
      • 2011-03-10
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      相关资源
      最近更新 更多