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 您不需要指定所需的列名称,您可以使用任何名称,您将在控制器中获得该值的参数