Как я могу сохранить идентификатор нового списка желаний в поле `wishlist_id`` wishlist_entry`? - PullRequest
2 голосов
/ 10 февраля 2012

Я хочу сохранить идентификатор wishlist в таблице wishlist_entry в столбце, подобном wishlist_id.У меня есть такой элемент link_to:

<%= link_to 'Create', new_wishlist_entry_path(:wishlist => @wishlist.id) %> 

Это дает мне следующий URL:

http://localhost:3000/wishlist_entries/new?wishlist=36

Действие wishlist_entry_controller new:

def new
  @wishlist_entry = WishlistEntry.new
  @wishlist = Wishlist.find(params[:wishlist])
  respond_to do |format|
    format.html # new.html.erb
    format.json { render json: @wishlist_entry }
  end
end

Действие создания:

def create
@wishlist_entry = WishlistEntry.new(
  :wishlist_id => Wishlist.find(params[:id]),
  :entry_name => params[:wishlist_entry][:entry_name],
  :description => params[wishlist_entry][:description]
)

Я получаю эту ошибку:

Couldn't find Wishlist without an ID
app/controllers/wishlist_entries_controller.rb:44:in `create'

Ошибка в ссылке:

:wishlist_id => Wishlist.find(params[:id]),

Что не так?Как сохранить идентификатор нового списка пожеланий в поле wishlist_id из wishlist_entry?

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Думаю, проблема в том, что идентификатор списка желаний идет в params [: wishlist], а не params [: id].Ошибка, которую вы видите в вашем контроллере, заключается в том, что params [: id] равен nil, а класс Wishlist не знает, что делать с Wishlist.find (nil).Попробуйте это:

def create
  @wishlist_entry = WishlistEntry.new(
    :wishlist_id => params[:wishlist]),
    :entry_name => params[:wishlist_entry][:entry_name],
    :description => params[wishlist_entry][:description]
  )
0 голосов
/ 10 февраля 2012

Не зная точно, что вы пытаетесь сделать здесь, похоже, проблема в том, что wishlist_id не передается вашему действию create.

Лучший способ исправить это - воспользоваться вложенными ресурсами, которые вы уже настроили, изменив

<%= link_to 'Create', new_wishlist_entry_path(:wishlist => @wishlist.id) %>

до

<%= link_to 'Create', new_wishlist_wishlist_entry_path(:wishlist => @wishlist.id) %>

(wishlist_wishlist_entry выглядит довольно плохо, но вы можете изменить его, используя :as => 'whatever' в своих маршрутах )

Тогда в вашем новом действии:

@wishlist = Wishlist.find(params[:wishlist_id])

В вашей форме:

form_for([@wishlist, @wishlist_entry])

И в вашем действии создания:

@wishlist = Wishlist.find(params[:wishlist_id])
@wishlist_entry = @wishlist.wishlist_entries.build(params[:wishlist_entry])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...