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
正在尝试找出一种更好的方法来分配与相关模型的评论。
我有以下 类:
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