2015-06-02 37 views
2

這是我第一次使用Cocoon,也許這是一個非常愚蠢的問題,但我已經花了很多時間尋找如何使用ERB模板來做到這一點,並避免使用simple_form或其他幫助。Rails 4,Cocoon,ERB Template,如何在Edit Action中選擇一個options_from_collection_for_select?

看看我的模型:

型號/ 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 

形式: 視圖/批次/ _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 %> 

局部:

視圖/批次/ _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當我在Edit Action中打開表單時,此幫助程序的第四個參數是選定的值...我無法找到我選擇存儲在我的數據庫中的值,它始終顯示1索引...我不能訪問@ ...對象從_form,其他字段(:description,:: 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 
+0

請發佈控制器代碼。 – Pavan

+0

我有完全相同的問題。控制器非常簡單,就像查找對象一樣,查找options_from_collection_for_select的值並將其全部渲染出來。 – Screatch

回答

1

我更改選擇我的邏輯,我做了它的工作過程是這樣:

<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> 

我張貼我的答案,以防有人遇到同樣的問題。

+0

你是最棒的! – asiniy

0

你忘了把括號正確

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

我不是主題首發,但這對我沒有任何幫助。 – Screatch

+0

是的,它沒有幫助我,實際上它給了我一個錯誤... – svonborries

相關問題