У меня есть модель под названием Wish:
class Wish < ApplicationRecord
belongs_to :user
has_one :global_product
validates :global_product_id, presence: true
validates :user_id, presence: true
end
Вот маршруты пожеланий:
user_wishes GET /users/:user_id/wishes(.:format) wishes#index
POST /users/:user_id/wishes(.:format) wishes#create
new_user_wish GET /users/:user_id/wishes/new(.:format) wishes#new
edit_user_wish GET /users/:user_id/wishes/:id/edit(.:format) wishes#edit
user_wish GET /users/:user_id/wishes/:id(.:format) wishes#show
PATCH /users/:user_id/wishes/:id(.:format) wishes#update
PUT /users/:user_id/wishes/:id(.:format) wishes#update
DELETE /users/:user_id/wishes/:id(.:format) wishes#destroy
Как только пользователь создает global_product, они направляются на его страницу показа. Оттуда я создал кнопку, чтобы создать желание. Global_product_id - это внешний ключ в таблице Wish, поэтому они создают желание из global_product.
Исходя из маршрута, я думал, что обязательные параметры: user_id и global_product_id:
<%= link_to 'Add this product to my wish list', user_wishes_path(:global_product_id => @global_product.id,
:user_id => current_user.id),
:method=> :post,
class: "btn btn-default" %>
В контроллере желаний есть метод create и wish_params:
def create
@wish = Wish.new(wish_params)
@wish.save
if @wish.save
redirect_to 'index'
else
render 'new'
end
end
def wish_params
params.require(:wish).permit(:global_product_id, :user_id)
end
Вот точная ошибка в моем последнем запросе:
Parameters: {"authenticity_token"=>"y1vzGG5+CoyGS4XAFJ6sQPlD5XyNRfSMA14r4lWsUh3N1FA8Uz/Q7HNUMWOpsPQyBILgpjVxJCM552757yNsjw==", "global_product_id"=>"25", "user_id"=>"1"}
Completed 400 Bad Request in 1ms (ActiveRecord: 0.0ms)
Я не уверен, что не так с этим запросом, так как в консоли rails я могу создать новое желание, используя Wish.create (user_id: 1, global_product_id: 25). Я пытался передать в мой запрос link_to желания и global_product, но с той же ошибкой, и, похоже, они мне не нужны. Все, что требуется, это user_id и global_product_id, которые находятся в неудачном запросе.