процесс collection_select для действий по обновлению контроллера - PullRequest
0 голосов
/ 22 января 2012

у меня 2 модели

Первая модель Категория.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 значением, которое я выбрал в select

1 Ответ

0 голосов
/ 22 января 2012

Проблема в @board.category_id = @category (вы устанавливаете Object в поле 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]

Второе решение удаляет запрос "SELECT" наКатегории

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...