2014-09-27 2 views
0

Я пытаюсь сделать опцию. Это позволяет пользователю добавлять определенный элемент в список избранных. Но я получаю эту ошибку:Rails :: param отсутствует или значение пуст

param is missing or the value is empty: favorite 

создать метод в любимом контроллере:

def create 
@favorite = Favorite.new(params.require(:favorite).permit(:item_id, :user_id)) 
if @favorite.save 
    redirect_to @favorite 
    flash[:notice] = 'Favorite was successfully created.' 
else 
    render 'new' 
end 
end 

Вид на пункт шоу:

<%= link_to 'Add to favorites', {:controller => "favorites", 
        :action => "create", 
        :item_id => @item.id, 
        :user_id => current_user.id}, 
        :method => "post" %> 

Запрос (Параметры):

{ "_method"=>"post", "authenticity_token"=>"Wz1eGNw/3GH9t+aOquT/hu1F27zBSqAx6K6igxoc2VI=", "item_id"=>"27", "user_id"=>"10"} 

URL:

/favorites?item_id=27&user_id=10 

ответ

0

Если посмотреть на документы для ActionController#permit это выглядит как PARAMS должны быть вложены в любимца:

(favorite: { item_id: 1, user_id: 1 }) 

При использовании рельсы образуют хелперы как form_for этого вложенности будет сделано автоматически, но потому, что вы вручную передавая параметры с помощью link_to item_id, и user_id будет вложен прямо под параметрами.

This SO answer объясняет, как вы можете объединить свои аргументы link_to в хэши params. В качестве альтернативы вы можете объединить их в контроллере до вызова params.require.

+0

Я использовал это: @favorite = Favorite.new (params.require (: favorite) .permit (избранное: [: item_id,: user_id])). Я получаю ту же самую ошибку msg. И если я удалю требование, он будет сохранен как ноль. – dima

+0

и oh Я попробовал это "<% = link_to 'Добавить в избранное', {: controller =>" избранное ",: action =>" create ",: params => {: item_id => @ item.id,: user_id => current_user.id}},: method => "post"%> "Но у меня есть неправильное количество аргументов (1 для 0)" кажется, что я отправляю аргументы, пока я не предполагаю. Idk, я в замешательстве. – dima

+0

Думаю, вам просто нужно изменить способ передачи параметров в 'link_to'. Попробуйте что-то вроде '<% = link_to 'Добавить в избранное', {: controller =>" избранное ",: action =>" create ",: params => params.merge ({: favorite => {: item_id => @ item.id,: user_id => current_user.id}})}%> '. Таким образом, вы объединяете свои новые параметры в основной параметр hash и правильно вставляете под 'favorite' –

Смежные вопросы