【问题标题】:NoMethodError in Views of a Rails appRails 应用程序视图中的 NoMethodError
【发布时间】:2017-10-18 22:36:10
【问题描述】:

我正在遵循一个教程,我必须在其中制作一种目录网站。因为需要有一个用户可以写评论的页面,所以我为评论创建了视图和表单。我所做的步骤是:

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 - 要在我添加的地方/节目上呈现评论/_form:

<div class="col-md-9">
    <h3>Reviews by People</h3>
    <%= render 'reviews/form' %>
  </div>

尝试呈现表单时出错,所以我去了 PlacesController,并将以下代码行放在 show 方法上:

  # 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'

我可以提供任何代码 sn-ps 以便更好地理解

【问题讨论】:

  • 这里的名字有点混乱。页面与地点。您是否同时拥有 PagesController 和 PlacesController 却忘记在正确的 PlacesController 中添加显示操作
  • 我更正了有关该问题的信息,谢谢。我有一个 PagesController 和一个 PlacesController。在我的 PagesController 上只有 def home 方法,里面什么都没有。在我的 PlacesController 中,我有这个:@review = Review.new
  • Review 表中有哪些列。
  • @rohan 您可以将这些字段粘贴到您的评论表中吗?
  • contentcontext?

标签: ruby-on-rails ruby model-view-controller partials


【解决方案1】:

你需要在你的表中添加一个指定的列名

rails g 迁移 AddColumnNameToTableName column_name:datatype

然后

rails db:迁移

注意:- 您应该知道黑白 form_for 和 form_tag 的区别,

form_for

你在这里使用form_for,所以你应该只在你已经创建的数据库列名中指定

form_tag

form_tag 您不需要指定所需的列名,您可以使用任何名称,您将在控制器中获得该值的参数

【讨论】:

    【解决方案2】:

    在评论表中添加一个名为 content 的新列

    bundle exec rails g migration add_content_to_reviews content:string
    
    bundle exec rake db:migrate
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2013-03-31
      • 1970-01-01
      • 2013-03-25
      相关资源
      最近更新 更多