我正在尝试将user_id(以便我可以访问用户详细信息)附加到已附加到名为Park的页面的注释中。
我设置了三个表格:Park,Comment和User:
class Park < ActiveRecord::Base
has_many :comments
has_many :users
end
class Comment < ActiveRecord::Base
belongs_to :park
has_one :user
end
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :comments
validates_presence_of :username
validates :username, uniqueness: true
def admin?
admin
end
end
如您在上面看到的,我正在使用Devise gem供用户和授权使用。
评论显示在Park上,因此它们是嵌套的:
park_comment GET /parks/:park_id/comments/:id(.:format) comments#show
我的评论控制器设置如下:
class CommentsController < ApplicationController
before_action :authenticate_user!, only: [:create]
before_action :authorize_admin!, only: [:delete]
def create
@park = Park.find(params[:park_id])
@comment = @park.comments.create(comment_params)
redirect_to park_path(@park)
end
def destroy
@park = Park.find(params[:park_id])
@comment = @park.comments.find(params[:id])
@comment.destroy
redirect_to park_path(@park)
end
private
def comment_params
params.require(:comment).permit(:comment, :user_id, :park_id)
end
end
我已经能够从park_id摆动到user_id,但是折衷方案一直是在另一个任期中获得很大的收益。
我只是想在评论表单中添加一个隐藏字段
<%= form_for([@park, @park.comments.build]) do |f| %>
<p>
<%= f.label :comment %><br>
<%= f.text_area :comment %>
<%= hidden_field_tag(:user_id, current_user.id) %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
但这似乎没有产生任何结果。
我曾尝试过一些ActiveRecord的加入工作,但它不想锁定到我的创建中,所以我放弃了。现在花了一段时间,我相信有一个简单的解决方案我只是看不到。有想法吗?
您hidden_field_tag
没有工作。它将创建一个单独的参数,而不是一个嵌套在所需参数下的参数。
我的建议是完全删除hidden_field并在控制器中指定current_user。
class CommentsController < ApplicationController
def create
@park = Park.find(params[:park_id])
@comment = @park.
comments.
create(
comment_params.
merge(user_id: current_user.id) # adding here, on creation
# or merge(user: current_user)
)
redirect_to park_path(@park)
end
def comment_params
params.
require(:comment).
permit(:comment)
end
end
为什么?因为否则用户可能会更改该hidden_field的值,并且您将错误地存储注释的user_id值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句