【问题标题】:How to add user_id in form params in Rails controller如何在 Rails 控制器的表单参数中添加 user_id
【发布时间】:2019-01-12 03:24:48
【问题描述】:

我有一个名为products 的模型,它有一个iduser_idproduct_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 的方式来做到这一点?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您可以使用您的 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 中阅读更多相关信息,文档推荐这种方式!

    【讨论】:

      【解决方案2】:

      解决方案 #1

      产品有user_id,这意味着product belongs_to :useruser 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-12
        • 2011-04-25
        • 2014-03-01
        • 2012-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多