неопределенный метод `first 'Mongoid - PullRequest
0 голосов
/ 05 февраля 2012

У меня есть 2 модели:

board.rb

class Board
 has_and_belongs_to_many :posts, :autosave => true
end

post.rb

class Post
 has_and_belongs_to_many :boards
end

В моих posts_controller.rb

def create
 @post = current_user.posts.new(params[:post])
 @post.save
end

В моих сообщениях просмотра у меня есть форма с полем collection_select:

<%= form_for(@post) do |f| %>
 <%= f.submit %>
<%= f.collection_select :board_ids, Board.where(:user_id => current_user.id), :id, :name%>
<% end %>

Я получаю с отношением типа has_and_belongs_to_many следующая ошибка:

неопределенный метод `first 'для BSON :: ObjectId (' 4f2e61ce1d41c8412a000215 '): BSON :: ObjectId

: board_ids - это массиввведите board_ids: [] в объекте Post.

Как сохранить объект из поля collection_select в этом массиве?

Ответы [ 2 ]

1 голос
/ 06 мая 2012

Если вы хотите использовать выбор, вам нужно указать опцию html «несколько», чтобы отправить массив опций.

<select multiple="muliple"> ...

Моя рабочая форма Rails (с использованием simple_form) выглядит так:

<%= simple_form_for @exercise, :html => { :multipart => true } do |f| %>
   <%= f.input_field :category_ids, :multiple => "multiple", :as => :grouped_select, :collection => CategoryGroup.all, :group_method => :categories %>
<% end %>
0 голосов
/ 05 февраля 2012

Проблема здесь заключается в том, что вы используете раскрывающийся список для отображения в многозначное поле (board_ids).Поэтому ваше приложение пытается установить для поля board_ids одно значение (BSON :: ObjectId), когда mongoid ожидает массив.

Если сообщение может быть связано со многими досками (и предполагается, что вы этого не делаетеиметь очень большое количество досок для данного пользователя), тогда, возможно, лучший способ добиться этого - использовать набор флажков, а не один выпадающий список.

<% Board.where(:user_id => current_user.id).each do |board| %>
  <%= check_box_tag 'post[board_ids][]', board.id, @post.board_ids.include?(board.id) %>
  <%= board.name %>
<% end %>
...