form_for , 未定义的方法名
Posted
技术标签:
【中文标题】form_for , 未定义的方法名【英文标题】:form_for , undefined method name 【发布时间】:2012-10-20 06:36:47 【问题描述】:我想在我的 rails 项目中添加一个评论模型,但我在渲染页面中出现错误提示:
错误:
Showing /Users/sovanlandy/rails_projects/sample_app/app/views/shared/_comment_form.html.erb where line #4 raised:
undefined method `comment_content' for #<Comment:0x007fd0aa5335b8>
。以下是相关代码
comment.rb
class Comment < ActiveRecord::Base
attr_accessible :comment_content
belongs_to :user
belongs_to :micropost
validates :comment_content, presence: true
validates :user_id, presence: true
validates :micropost_id, presence: true
end
micropost.rb
class Micropost < ActiveRecord::Base
attr_accessible :content
belongs_to :user
has_many :comments, dependent: :destroy
.....
end
user.rb
class User < ActiveRecord::Base
has_many :microposts, dependent: :destroy
has_many :comments
....
end
cmets_controller.rb
class CommentsController < ApplicationController
def create
@micropost = Micropost.find(params[:micropost_id])
@comment = @micropost.comments.build(params[:comment])
@comment.micropost = @micropost
@comment.user = current_user
if @comment.save
flash[:success] = "Comment created!"z
redirect_to current_user
else
render 'shared/_comment_form'
end
end
end
_comment_form_html.erb 的一部分
<%= form_for([micropost, @comment]) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="field">
<%= f.text_field :comment_content, place_holder: "Comment" %>
</div>
<button class="btn" type="submit">
Create
</button>
<% end %>
我从 _micropost.html.erb 类中调用了 patial _comment_form.html.erb
<%= render 'shared/comment_form', micropost: micropost %>
我还将注释作为嵌套资源放在 route.rb 中
resources :microposts do
resources :comments
end
如何解决错误? 谢谢!
【问题讨论】:
您确定数据库中有comment_content 字段吗? @pavel :你是对的......我忘了运行迁移命令。所以我的菜鸟......谢谢! 【参考方案1】:您是否为 Comment a run it 创建了相应的迁移?该错误表示它正在尝试访问不存在的方法。这意味着您写错了字段的名称,或者您没有运行将该字段添加到模型的迁移。你能从 schema.rb 复制 cmets 表的部分吗?
【讨论】:
你说得对,我忘了迁移我的数据库,所以数据库中没有评论内容...【参考方案2】:在你的micropost.rb
中试试这个
class Micropost < ActiveRecord::Base
...
has_many :comments, dependent: :destroy
accepts_nested_attributes_for :comments
attr_accessible :comments_attributes
...
end
在你的_comment_form.html.erb
<%= form_for @micropost do |f| %>
<%= f.fields_for :comments do |comment| %>
...
<div class="field>
<%= comment.text_field :comment_content, place_holder: "Comment" %>
</div>
...
<% end %>
<%= f.submit%>
<% end %>
【讨论】:
只是想强调一下,form_for 似乎没有在comment.rb 中重新定义我的comment_content,并认为它是在某个地方定义的方法,但它无法找到。我认为它也符合您的想法...... 嗯,这次它没有注册@micropost。它说:NilClass 的未定义方法“model_name”:Class 提取的源(在第 1 行附近):1: 2: 3: 4: 谢谢现在我让它工作了。我没有正确迁移我的数据库,因此它没有 comment_content 列。欢呼>以上是关于form_for , 未定义的方法名的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印内容带有文件文件名方法名行号 等信息,方便定位日志输出的地方
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印内容带有文件文件名方法名行号 等信息,方便定位日志输出的地方