Javascript 使用jQuery将实例从视图传递到控制器

Javascript 使用jQuery将实例从视图传递到控制器,javascript,jquery,ruby-on-rails,ruby,Javascript,Jquery,Ruby On Rails,Ruby,环境Ruby 2.0.0、Rails 4.0.3、Windows 8.1、jQuery 编辑:仅供参考,前几天我正在讨论这个问题,有人告诉我,解决这个问题的常用方法就是传递记录ID。当然,我建议在一般情况下使用该解决方案。在这种情况下,记录正在创建中,尚未存储,因此它没有ID,并且在完成所有必需字段之前不能有ID 我需要通过jQuery将对象实例从视图传递到控制器,以便控制器使用它使用依赖选择渲染部分。尽管我只是传递了一个名为对象的字符串,但这个过程通常是有效的。但是,现在我必须实现强参数以允许

环境Ruby 2.0.0、Rails 4.0.3、Windows 8.1、jQuery

编辑:仅供参考,前几天我正在讨论这个问题,有人告诉我,解决这个问题的常用方法就是传递记录ID。当然,我建议在一般情况下使用该解决方案。在这种情况下,记录正在创建中,尚未存储,因此它没有ID,并且在完成所有必需字段之前不能有ID

我需要通过jQuery将对象实例从视图传递到控制器,以便控制器使用它使用依赖选择渲染部分。尽管我只是传递了一个名为对象的字符串,但这个过程通常是有效的。但是,现在我必须实现强参数以允许更新,这需要实际的实例,而不仅仅是实例的字符串名称

在jQuery中,我使用以下方法获取实例,但这显然是错误的,因为它只获取实例的字符串名称。我想它可能需要序列化?但是,我只能获取无法序列化的字符串名称

var car = $('select#car_year_id').attr("car");
基本问题是,如何在jQuery中检索car的实际实例?或者,我想,问题是,给定RubyonRails中实例的字符串名称,如何处理实际实例?任何一个都可能足够了。当然,其他替代方案也会受到欢迎。谢谢

表格为:

<div class="span8">
  <%= simple_form_for @car,
                      defaults: {label: false},
                      html: {class: 'form-vertical'},
                      wrapper: :vertical_form,
                      wrapper_mappings: {
                              check_boxes: :vertical_radio_and_checkboxes,
                              radio_buttons: :vertical_radio_and_checkboxes,
                              file: :vertical_file_input,
                              boolean: :vertical_boolean
                      } do |f| %>
      <%= f.input(:stock_number, {input_html: {form: 'new_car', car: @car},  autocomplete: :off, placeholder: 'Stock number?'}) %>
      <%= f.input(:year_id, {input_html: {form: 'new_car', car: @car}, collection: Year.all.collect { |c| [c.year, c.id] }, prompt: "Year?"}) %>
      <%= render partial: "makes", locals: {form: 'new_car', car: @car} %>
      <%= render partial: "models", locals: {form: 'new_car', car: @car} %>
      <input type="submit" form="new_car" value="Create Car" class="btn btn-default btn btn-primary">
  <% end %>
</div>
控制器操作为:

  def make_list
    makes = params[:year].blank? ? "" : Make.where(year_id: params[:year]).order(:make)
    render partial: "makes", locals: { car: params[:car], form: params[:form], makes: makes }
  end

我找到了答案!太激动了

有一个新的HTML构造,允许您对HTML元素使用任意属性,只要名称前面有“data-”。例如:

<%= f.input(:year_id, {input_html: {form: 'new_car', data-car: @car}}, collection: Year.all.collect { |c| [c.year, c.id] }, prompt: "Year?"}) %>
见:

这会将car作为散列对象返回,这正是我所需要的

帮助很大的总体参考:

为了完整起见,我使用以下代码将散列转换回控制器中的对象:

car_hash = params[:car].gsub!(/":/, '" => ')
null = nil
@car = Car.new(eval(car_hash))
<%= f.input(:year_id, {input_html: {form: 'new_car', data-car: @car}}, collection: Year.all.collect { |c| [c.year, c.id] }, prompt: "Year?"}) %>
<%= f.input(:year_id, {input_html: {form: 'new_car', data: { car: @car}}, collection: Year.all.collect { |c| [c.year, c.id] }, prompt: "Year?"}) %>
var element = document.getElementById('car_year_id');
var car = element.dataset.car;
car_hash = params[:car].gsub!(/":/, '" => ')
null = nil
@car = Car.new(eval(car_hash))