Rails 4,Cocoon,ERB模板,如何在“编辑操作”中选择一个options_from_collection_for_select?

von

这是我第一次使用Cocoon,也许这是一个非常愚蠢的问题,但是我已经花了很多时间寻找如何使用ERB模板来做到这一点,并避免使用simple_form或其他帮助程序。

看一下我的模型:

型号/loot.rb

class Lot < ActiveRecord::Base

  has_many :colindanciums, dependent: :destroy
  has_many :cardinal_points, through: :colindanciums 
  accepts_nested_attributes_for :colindanciums, allow_destroy: true

end

型号/colindancium.rb

class Colindancium < ActiveRecord::Base
    belongs_to :cardinal_poing
    belongs_to :lot
end

型号/cardinal_point.rb

class CardinalPoint < ActiveRecord::Base
    has_many :colindanciums
    has_many :lots, through: :colindanciums
end

格式:views / lots / _form.html.erb

<%= form_for(@lot, remote: true) do |f| %>
  <%= render 'shared/error_messages', object: @lot %>
...
...
...

    <fieldset id="colindancium-orientation"> 
      <ol> 
        <%= f.fields_for :colindanciums do |colindancium| %> 
          <%= render 'colindancium_fields', f: colindancium %> 
        <% end %> 
      </ol> 
      <%= link_to_add_association 'Nueva Colindancia', f, :colindanciums, 'data-association-insertion-node' => "#colindancium-orientation ol", 'data-association-insertion-method' => "append" %> 
    </fieldset> 

...
...
...            
<% end %>

部分:

views / lots / _colindancium_fields.html.erb

<li class="control-group nested-fields">
  <div class="controls">
    <%= f.label :description, "Descripcion:" %>
    <%= f.text_field :description %>

    <%= f.label :linear_meters, "Metros Lineales:" %>
    <%= f.text_field :linear_meters %>

    <%= f.label :cardinal_point_id, "Orientacion:" %>
    <%= f.select :cardinal_point_id, 
        options_from_collection_for_select(CardinalPoint.all, :id, :name), { }, { :class => "form-control", :prompt => "Seleccione un Punto Cardinal" } %>

    <%= link_to_remove_association "Eliminar", f %>
  </div>
</li>

当我插入新字段时,一切工作都很好,将其保存到数据库中,将其更新到数据库中,当我在“编辑操作”中打开表单时,我的问题出在options_from_collection_for_select上,此辅助函数的第四个参数是选定的值...我找不到做出选择存储在我的分贝值的方式,它总是显示1个指数...我无法访问@ ...从对象_form,其他字段(说明: linear_meters)工作得很好,我的问题是在f.select中,我不知道如何做到这一点。

编辑我的控制器:

# GET /lots/new
  def new
    @lot = Lot.new
    @lot.colindanciums.build
    authorize @lot
  end

  # PATCH/PUT /lots/1
  # PATCH/PUT /lots/1.json
  def update
    authorize @lot
    respond_to do |format|
      if @lot.update(lot_params)
        format.html { redirect_to @lot, notice: 'Lot was successfully updated.' }
        format.json { render :show, status: :ok, location: @lot }
        format.js
      else
        format.html { render :edit }
        format.json { render json: @lot.errors, status: :unprocessable_entity }
        format.js { render json: @lot.errors, status: :unprocessable_entity }
      end
    end
  end
von

我在选择中更改了逻辑,使它以这种方式工作:

  <div class="form-group">
    <%= f.label :cardinal_point_id, "Orientacion:", :class => "control-label" %>
    <%= f.select :cardinal_point_id , CardinalPoint.all.collect  {|p| [ p.name, p.id ] }, { :include_blank => 'Seleccione un Punto Cardinal'}, :class => "form-control" %>
  </div>

如果有人遇到同样的问题,我会发布我的答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档