我是编程新手,我正在努力使用我在我的应用中实现的新功能。我希望用户能够评论其他人的微博。
我收到了错误:无法进行质量分配微博
用户模型:
attr_accessible :name, :email, :password, :password_confirmation #is this secure with password there?
attr_protected :admin #attr_protected necessary?
has_many :microposts, dependent: :destroy
has_many :comments, :through => :microposts, dependent: :destroy
Micropost模型:
attr_accessible :comment #basically the content of the post
attr_protected :user_id
has_many :comments, dependent: :destroy
评论模型:
attr_accessible :content, :micropost
belongs_to :user
belongs_to :micropost
validates :user_id, presence: true
validates :micropost_id, presence: true
validates :content, presence: true
default_scope order: 'comments.created_at ASC' #is this necessary?
评论控制器:
def create
@micropost = Micropost.find_by_id(params[:id]) #is this necessary?
@comment = current_user.comments.create(:micropost => @micropost)
redirect_to :back
end
用户控制器:
def show
@user = User.find_by_id(params[:id])
@microposts = @user.microposts.paginate(page: params[:page])
@micropost = current_user.microposts.build
@comments = @micropost.comments
@comment = current_user.comments.create(:micropost => @micropost) #build, new or create??
end
查看/评论/ _form :(在每个微博结束时调用此部分)
<span class="content"><%= @comment.content %></span>
<span class="timestamp">Said <%= time_ago_in_words(@comment.created_at) %> ago.</span
<%= form_for(@comment) do |f| %>
<%= f.text_field :content, placeholder: "Say Something..." if signed_in? %>
<% end %>
路线:
resources :users
resources :microposts, only: [:create, :destroy]
resources :comments, only: [:create, :destroy]
答案 0 :(得分:1)
您应该将属性微博放在attr_accessible
上attr_accessible :content, :micropost
默认情况下,所有属性都不可访问。您必须在attr_accessible上定义您的可访问属性。
更多信息here
答案 1 :(得分:0)
JMarques说得对,但我喜欢在_id
上使用attr_accessible
来保持一致。考虑到这一点,您可以使用
# comment.rb
attr_accessible :content, :micropost_id
# controller
current_user.comments.create(:micropost_id => @micropost.try(:id))
刚刚添加try
,以防find_by_id
返回nil
答案 2 :(得分:0)
根据rails4,您可以使用强参数:
def create
@micropost = Micropost.find_by_id(micropost_params)
................
end
private
def micropost_params
params.require(:micropost).permit(:id)
end