jon*_*nic 8 forms comments ruby-on-rails ruby-on-rails-3
我在实现一种评论表单时遇到问题,其中评论(称为“微博”)属于用户和帖子,用户有_许多评论,帖子(称为“提议”)有_许多评论。
我的评论表单代码是:
<%= form_for @micropost do |f| %>
<div class="field">
<%= f.text_area :content %>
</div>
<div class="actions">
<%= f.submit "Submit" %>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
MicropostsController 在创建操作中有这个:
def create
@proposition = Proposition.find(params[:proposition_id])
@micropost = current_user.microposts.build(params[:micropost])
@micropost.proposition = @proposition
if @micropost.save
flash[:success] = "Contribution submitted"
redirect_to root_path
else
@feed_items = []
render 'pages/home'
end
end
Run Code Online (Sandbox Code Playgroud)
创建新微博的表单与提议在同一页面上,但提议 id 似乎在任何时候都没有通过。
这是我在提交微博表单时遇到的错误:
ActiveRecord::RecordNotFound in MicropostsController#create
找不到没有 ID 的提案
参数是:
{"commit"=>"Submit", "micropost"=>{"proposition_id"=>"", "content"=>"第一条评论"}, "authenticity_token"=>"TD6kZaHv3CPWM7xLzibEbaLJHI0Uw43H+pq88HLZFjc=", "utf8" =>"âœ""}
我对 Rails 完全陌生,对编码任何东西都非常陌生,所以如果你能给我任何帮助,我将不胜感激!
提前致谢。
你的参数是:
"micropost"=>{"proposition_id"=>"", "content"=>"First comment"}
Run Code Online (Sandbox Code Playgroud)
所以要得到proposition_id,你必须这样做:
params[:micropost][:proposition_id]
Run Code Online (Sandbox Code Playgroud)
但这是空的。而且没有其他地方可以得到这个id,这就是这一行检索的原因nil:
@proposition = Proposition.find(params[:proposition_id])
Run Code Online (Sandbox Code Playgroud)
使这个失败:
@micropost.proposition = @proposition
Run Code Online (Sandbox Code Playgroud)
您必须:
添加proposition_id作为hidden_field
将其存储在会话中
但我对您的背景了解不够,无法在这里为您提供正确的解决方案。
编辑:
在您的链接中,替换:
<%= f.hidden_field :proposition_id %>
Run Code Online (Sandbox Code Playgroud)
和:
<%= f.hidden_field :proposition_id, :value => @proposition.id %>
Run Code Online (Sandbox Code Playgroud)
如果不起作用,请显示您的参数。
注意:依赖实例变量是不好的做法,您应该将局部变量发送到每个部分
| 归档时间: |
|
| 查看次数: |
8158 次 |
| 最近记录: |