Как добавить user_id в форму params в контроллере Rails - PullRequest
0 голосов
/ 11 января 2019

У меня есть эта модель, названная products, которая имеет id, user_id и product_name. У меня есть простой form_for, чтобы перейти к моему product_controller параметру product_name. В этом же контроллере у меня есть доступ к current_user, который я должен передать, чтобы создать новый Product. Проблема в том, что user_id всегда должен быть текущим пользователем, вошедшим в систему, поэтому я не могу позволить пользователю отправить мне этот параметр в моем form_for, поэтому я не могу permit также его. Сейчас я создаю новый хеш с параметром user_id и объединяем параметры, полученные из form.

products_controller.rb:

  def create
    product_user_id_param = { "user_id": current_user.id.to_s }
    @product = Product.new(product_user_id_param.merge(params[:product_name]))
    ...
  end

Есть ли более удобный или Rails способ сделать это?

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Решение № 1

Продукт имеет user_id, что означает product belongs_to :user и user has_many :products

Следовательно, это можно записать как

current_user.products.new(product_name: params[:product_name])

Решение # 2

Установить current_user явно

@product = Product.new(product_name: params[:product_name])
@product.user_id = current_user.id
#@product.user = current_user
@product.save
0 голосов
/ 11 января 2019

Вы можете создать свой продукт, используя ссылку current_user, на мой взгляд, это более удобный способ:

current_user.produtcs.create(name: params[:product_name])

Но чтобы вышеприведенный код работал, вы должны правильно построить свои отношения, как показано ниже:

class User < ActiveRecord::Base
   has_many :products
end

class Product < ActiveRecord::Base
   belogs_to :user
end

Теперь вы можете сделать это!

Вы можете узнать больше об этом, в https://guides.rubyonrails.org/v3.2/association_basics.html, Документы рекомендуются таким образом!

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