Rails 创建多个动作 belongs_to

Rails create action with multiple belongs_to

正在尝试找出一种更好的方法来分配与相关模型的评论。

我有以下 类:

class User < ActiveRecord::Base
  has_many :reviews, dependent: :destroy
end

class Review < ActiveRecord::Base
  belongs_to :user
  belongs_to :restaurant
end

class Restaurant < ActiveRecord::Base
    has_many :reviews, dependent: :destroy
end

非常简单的东西。评论必须有餐厅和用户。我的创建操作如下所示:

def create
    @restaurant = Restaurant.find(params[:restaurant_id])
    @review = @restaurant.reviews.build(review_params)
    @review.user = current_user

    if @review.save
        redirect_to @restaurant
    else
        render 'new'
    end
  end

  private
  def review_params
    params.require(:review).permit(:content)
  end

目前我为餐厅创建评论,然后将评论的用户分配给当前用户。

这一切都很好,但是有没有更简洁的方法来建立关联? 有没有办法在强参数旁边向构建方法添加额外的参数?

我查看了 accepts_nested_attributes_for,但无法正常工作。

谢谢!

在您的表单中,您可以放置​​一个隐藏字段,其中包含您要分配的 user_id

<%= f.hidden_field :user_id, value: @user.id %>

然后,将其添加到您的 review_params:

params.require(:review).permit(:content, :user_id)

您可以在 review_params 中使用 merge,如下所示

def review_params
  params.require(:review).permit(:content).merge(user_id: current_user.id)
end

这样你就可以在create方法

中删除这一行@review.user = current_user