【问题标题】:NoMethodError in Discussions#new讨论中的 NoMethodError#new
【发布时间】:2014-03-03 09:45:50
【问题描述】:

谁能帮我解决这个问题?提前致谢! 我收到以下错误:

NoMethodError in Discussions#new
Showing C:/Users/punitha/aggregator/app/views/discussions/_form.html.erb where line #1 raised:

undefined method `discussions_index_path' for #<#<Class:0x4375758>:0x437d6d8>

Extracted source (around line #1):

1  <%= form_for @discussions do |f| %>
2  <% if @discussions.errors.any? %>
3        <div id="error_explanation">
4        <h2><%= pluralize(@discussions.errors.count, "error") %> prohibited

模板包含的痕迹:app/views/discussions/new.html.erb

Rails.root:C:/Users/punitha/aggregator

Application Trace | Framework Trace | Full Trace
app/views/discussions/_form.html.erb:1:in `_app_views_discussions__form_html_erb___1058370717_35436840'
app/views/discussions/new.html.erb:3:in `_app_views_discussions_new_html_erb__298093787_35389404'

而文件_form.html.erb是

<%= form_for @discussions do |f| %>
<% if @discussions.errors.any? %>
 <div id="error_explanation">
 <h2><%= pluralize(@discussions.errors.count, "error") %> prohibited
     this discussion from being saved:</h2>
 <ul>
    <% @discussions.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
    <% end %>
    </ul>
</div>
 <% end %>
 <p>
<%= f.label :source_url %><br>
<%= f.text_field :source_url %>
  </p>

 <p>
<%= f.label :discussion_id %><br>
<%= f.text_area :discussion_id %>
 </p>

<p>
<%= f.label :discussion_msg %><br>
<%= f.text_area :discussion_msg %>
</p>

 <p>
 <%= f.label :discussion_type %><br>
 <%= f.text_field :discussion_type %>
 </p>

<p>
<%= f.label :discussion_link %><br>
<%= f.text_area :discussion_link %>
</p>
<p>
<%= f.label :discussion_thumb %><br>
<%= f.text_area :discussion_thumb %>
 </p>
<p>
<%= f.label :discussion_permalink %><br>
<%= f.text_area :discussion_permalink %>
</p>

<p>
<%= f.label :discussion_likecount %><br>
<%= f.number_field :discussion_likecount%>
 </p>

<p>
<%= f.label :comment %><br>
<%= f.text_area :comment%>
</p>
<p>
<%= f.label :source_id %><br>
<%= f.number_field :source_id%>
</p>

 <p>
<%= f.submit %>
 </p>
 <% end %>

而我的 app/views/discussions/new.html.erb 是,

<h1>New discussion</h1>

<%= render 'form' %>

<%= link_to 'Back', discussions_path %>

routes.rb 文件

Aggregator::Application.routes.draw do
get "welcome/index"
root 'welcome#index'


resources:discussions do
resources :comments
end
end

【问题讨论】:

  • 显然您正在调用未定义的路由。你能分享你的routes.rb 文件吗?
  • 在资源和讨论之间放置一个空格。
  • @punitha 你能在你定义@discussions的地方发布控制器的动作吗?

标签: ruby-on-rails nomethoderror


【解决方案1】:

您的 form_for 设置为数组 (@discussions),而它应该设置为单个实例 (@discussion)。

在您的 DiscussionsController 的新方法中,确保您有以下内容:

@discussion = Discussion.new

然后,在您的表单中,将您当前的 form_for 表达式更改为:

form_for @discussion

看看这是否能清除你的错误。

【讨论】:

    【解决方案2】:

    首先你应该纠正你在routes.rb中的拼写错误。

    它应该看起来像(我在resources:discussions 之间添加了一个空格):

    Aggregator::Application.routes.draw do
      get "welcome/index"
      root 'welcome#index'
    
      resources :discussions do
        resources :comments
      end
    end
    

    正如 Craig Kaminsky 所说,您似乎将 @discussions 作为 discussion 记录的数组。'

    在控制器的操作new 中,您应该将对象初始化为:

    @discussion = Discussion.new
    

    你的表单应该使用相同的实例变量 (@discussion)

      <%= form_for @discussion do |f| %>
        <% if @discussion.errors.any? %>
            <div id="error_explanation">
            <h2><%= pluralize(@discussion.errors.count, "error") %> prohibited
            ...
        <% end %>
        ...
        ...
      <% end %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多