Rails 应用的视图中出现 NoMethodError
NoMethodError in Views of a Rails app
我正在学习一个教程,其中我必须制作一种目录网站。因为需要有一个用户可以写评论的页面,所以我为评论创建了视图和表单。我完成的步骤是:
1 - 在 app/views/reviews:
创建了评论文件夹
2 - 在该文件夹中创建了一个名为 _forms.html.erb 的部分用于评论
<%= simple_form_for(@review) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :content, required: true %>
<%= f.hidden_field :place_id, required: true, value: @place_id %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
3 - 要在 places/show 上呈现 review/_form,我添加:
<div class="col-md-9">
<h3>Reviews by People</h3>
<%= render 'reviews/form' %>
</div>
尝试呈现表单时出现错误,所以我转到 PlacesController 并将以下代码行放在显示方法中:
# GET /places/1
# GET /places/1.json
def show
@review = Review.new
end
我的 routes.rb 文件有评论的路线。我得到的错误是:
NoMethodError in Places#show
Showing C:/workinrails/myyelpapp/app/views/reviews/_form.html.erb where line #5 raised:
undefined method `content' for #<Review:0x9200a30>
Trace of template inclusion: app/views/places/show.html.erb
app/views/reviews/_form.html.erb:5:in `block in _app_views_reviews__form_html_erb___988880813_76383660'
app/views/reviews/_form.html.erb:1:in `_app_views_reviews__form_html_erb___988880813_76383660'
app/views/places/show.html.erb:13:in `_app_views_places_show_html_erb__530556826_71913768'
我可以提供任何代码片段以便更好地理解
在评论中添加名为内容的新列table
bundle exec rails g migration add_content_to_reviews content:string
bundle exec rake db:migrate
您需要在 table
中添加指定的列名称
rails g migration AddColumnNameToTableName column_name:datatype
然后
rails db:migrate
注:-
你应该知道区别 b/w form_for & form_tag,
form_for
你在这里使用 form_for,所以你应该只在你已经创建的数据库中指定列名
form_tag
form_tag 您不需要指定所需的列名称,您可以使用任何名称,您将在控制器中获得该值的参数
我正在学习一个教程,其中我必须制作一种目录网站。因为需要有一个用户可以写评论的页面,所以我为评论创建了视图和表单。我完成的步骤是:
1 - 在 app/views/reviews:
创建了评论文件夹2 - 在该文件夹中创建了一个名为 _forms.html.erb 的部分用于评论
<%= simple_form_for(@review) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :content, required: true %>
<%= f.hidden_field :place_id, required: true, value: @place_id %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
3 - 要在 places/show 上呈现 review/_form,我添加:
<div class="col-md-9">
<h3>Reviews by People</h3>
<%= render 'reviews/form' %>
</div>
尝试呈现表单时出现错误,所以我转到 PlacesController 并将以下代码行放在显示方法中:
# GET /places/1
# GET /places/1.json
def show
@review = Review.new
end
我的 routes.rb 文件有评论的路线。我得到的错误是:
NoMethodError in Places#show
Showing C:/workinrails/myyelpapp/app/views/reviews/_form.html.erb where line #5 raised:
undefined method `content' for #<Review:0x9200a30>
Trace of template inclusion: app/views/places/show.html.erb
app/views/reviews/_form.html.erb:5:in `block in _app_views_reviews__form_html_erb___988880813_76383660'
app/views/reviews/_form.html.erb:1:in `_app_views_reviews__form_html_erb___988880813_76383660'
app/views/places/show.html.erb:13:in `_app_views_places_show_html_erb__530556826_71913768'
我可以提供任何代码片段以便更好地理解
在评论中添加名为内容的新列table
bundle exec rails g migration add_content_to_reviews content:string
bundle exec rake db:migrate
您需要在 table
中添加指定的列名称rails g migration AddColumnNameToTableName column_name:datatype
然后
rails db:migrate
注:- 你应该知道区别 b/w form_for & form_tag,
form_for
你在这里使用 form_for,所以你应该只在你已经创建的数据库中指定列名
form_tag
form_tag 您不需要指定所需的列名称,您可以使用任何名称,您将在控制器中获得该值的参数