2012-01-22 15 views
0

我有2种型号过程collection_select

第一个模型category.rb

class Category 
    include Mongoid::Document 

# Relationships 
    has_many :boards, :dependent => :destroy , :autosave => true 
    accepts_nested_attributes_for :boards 

    #fields 
    field :name 

    #attr 
    attr_accessible :name, :boards_attributes 
end 

第二种模式的board.rb

class Board 
include Mongoid::Document 

#Relationships 
belongs_to :category 

    #fields 
    field :name 
    field :description 

    #attr 
    attr_accessible :name, :description 

end 

我有在编辑板查看下一个表格:

<%= form_for [@board], :url => user_board_path do |f| %> 
<%= f.text_field :name %> 
<%= f.text_area :description, :cols =>72, :rows => 5, %> 
<%= f.collection_select :category_id, Category.all, :id, :name%> 
<% end %> 

和我有更新动作从boards_controller.rb下一个:

def update 
    @board = Board.find(params[:id]) 
    @category = Category.find(params[:category_id]) 
    @board.category_id = @category 

respond_to do |format| 
    if @board.update_attributes(params[:board]) 
    format.html { redirect_to user_board_path(@board.user, @board), notice: 'Board was successfully updated.' } 
    format.json { head :ok } 
    else 
    format.html { render action: "edit" } 
    format.json { render json: @board.errors, status: :unprocessable_entity } 
    end 
end 
end 

为什么我得到@ board.category_id零?我想更新@ board.category_id与我选择的值

回答

0

问题是@board.category_id = @category(您将对象设置为ID字段)。它应该是

@board = Board.find(params[:id]) 
@category = Category.find(params[:category_id]) 
@board.category = @category 

,或者如果@category没有控制器,也没有在视图中使用,你可以写

@board = Board.find(params[:id]) 
@board.category_id = params[:category_id] 

第二个解决方案消除了对类别

+0

谢谢“选择”请求@Baldrick,不适用于我:(。我在日志中获得警告:不能批量分配受保护的属性:category_id'。 – hyperrjas

+0

Tha问题已修复:D。我已将**:category_id **添加到Board Model :'attr_accessible:name,:pins_attributes,:description,:category_id'谢谢y ou非常! – hyperrjas