简体   繁体   English

Rails错误消息 - 参数2的错误数量为1

[英]Rails error message - wrong number of arguments 2 for 1

I clicked the comment link (to post, not read, a comment) in the Enki blogging gem and it gave me this error message 我在Enki blogging gem中点击了评论链接(发布,未阅读,评论),它给了我这个错误消息

ArgumentError in Posts#show

wrong number of arguments (2 for 1)
Extracted source (around line #27):

But I can't figure out what the two arguments are that it's sending. 但我无法弄清楚它发送的两个论点是什么。 Note that I had already created one post with no comments on it. 请注意,我已经创建了一个没有评论的帖子。

This is the controller action show 这是控制器动作节目

 def show
    @post = Post.find_by_permalink(*([:year, :month, :day, :slug].collect {|x| params[x] } << {:include => [:approved_comments, :tags]}))
    @comment = Comment.new
  end

this is the link I'm clicking in views/posts/index.html.erb to make a comment 这是我点击views / posts / index.html.erb进行评论的链接

<li class="comments"><%= link_to(pluralize(post.approved_comments.size, "comment"), post_path(post, :anchor => 'comments')) %></li>

This is the error message on the screen. 这是屏幕上的错误消息。 Any suggestions how I might go about trying to figure out what's going on? 有什么建议我可以去试图找出发生了什么?

Rspec tests (Note, I haven't created any comments so I don't know why it's expecting one) Rspec测试(注意,我没有创建任何评论所以我不知道为什么它会期待一个)

    1) DeletePostUndo#process! creates a new post with comments based on the attributes stored in #data
         Failure/Error: new_post.comments.count.should == 1
           expected: 1
                got: 0 (using ==)
         # ./spec/models/delete_post_undo_spec.rb:11:in `block (3 levels) in <top (required)>'

   2) /posts/show.html.erb should render a post
     Failure/Error: render :template => "/posts/show.html.erb"
     ActionView::Template::Error:
       wrong number of arguments (2 for 1)
     # ./app/helpers/url_helper.rb:9:in `post_comments_path'
     # ./app/views/posts/show.html.erb:27:in `_app_views_posts_show_html_erb___532600282027141355_2210809080'
     # ./spec/views/posts/show.html.erb_spec.rb:45:in `block (2 levels) in <top (required)>'

Error Message on localhost:3000 localhost:3000上的错误消息

ArgumentError in Posts#show

Showing /Users/mm/Sites/trenchstory/app/views/posts/show.html.erb where line #27 raised:

wrong number of arguments (2 for 1)
Extracted source (around line #27):

24:       <% end -%>
25:     </ul>
26:   </div>
27:   <% end -%>
28: <%= form_for([@post, @comment]) do |form| -%>
29:   <div>
30:     <p><%= form.text_field 'author' %><label for="comment_author"><small>Name or <a href="http://openidexplained.com/">OpenID</a> (required)</small></label></p>
Rails.root: /Users/mm/Sites/trenchstory

Application Trace | Framework Trace | Full Trace
app/helpers/url_helper.rb:9:in `post_comments_path'
app/views/posts/show.html.erb:27:in `_app_views_posts_show_html_erb___852287167798563826_2191478080'
Request

Parameters:

{"year"=>"2012",
 "month"=>"02",
 "day"=>"16",
 "slug"=>"my-first-post"}
Show session dump

_csrf_token: "OogtzfpSz3JylLAjvBdnBkn/Ti4RdAc+sbuGXeREqHA="
logged_in: true
session_id: "b045900073f1eed9a9880ff4ead34d07"
warden.user.user.key: ["User", [1], "$2a$10$9C.WngPResjBHCQ/vXK0JO"]
Show env dump

GATEWAY_INTERFACE: "CGI/1.1"
HTTP_ACCEPT: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
HTTP_ACCEPT_CHARSET: "ISO-8859-1,utf-8;q=0.7,*;q=0.3"
HTTP_ACCEPT_ENCODING: "gzip,deflate,sdch"
HTTP_ACCEPT_LANGUAGE: "en-US,en;q=0.8"
REMOTE_ADDR: "127.0.0.1"
REMOTE_HOST: "activate.adobe.com"
SERVER_NAME: "localhost"
SERVER_PROTOCOL: "HTTP/1.1"
Response

Headers:

None

Update 更新

views/posts/show.html.erb (see the partial below) views / posts / show.html.erb(参见下面的部分内容)

  <% content_for(:head) do -%>
      <%= javascript_include_tag 'common' %>
      <%= javascript_include_tag 'live-comment-preview' %>
    <% end -%>
    <% content_for(:page_title) do -%>
    <%= post_title(@post) -%>
    <% end -%>
    <%= render :partial => 'posts/post', :locals => {:post => @post} %>
    <ol class="commentlist">
      <% @post.approved_comments.each do |comment| -%>
      <li<%=raw cycle(' class="alt"', '') %> id="comment-<%= comment.id %>">
        <%= render :partial => 'comments/comment', :locals => {:comment => comment} %>
      </li>
      <% end -%>
    </ol>
    <div class="related">Looking for more? Head on over to the <%= link_to("archives", archives_path) %>.</div>
    <h2>Post a comment</h2>
      <% unless @comment.errors.empty? -%>
      <div class="errors">
        <h3>Comment not added!</h3>
        <ul>
          <% @comment.errors.sort_by(&:first).each do |error| -%>
            <li><%= format_comment_error(error) %></li>
          <% end -%>
        </ul>
      </div>
      <% end -%>
    <%= form_for([@post, @comment]) do |form| -%>
      <div>
        <p><%= form.text_field 'author' %><label for="comment_author"><small>Name </small></label></p>
        <p><%= form.text_area 'body' %><br><small>(<a href="http://lesstile.rubyforge.org">lesstile enabled</a> - surround code blocks with ---)</small></p>
        <p><%= submit_tag "Add Comment" %></p>
      </div>
    <% end -%>

partial rendered in app views posts show 在app视图中部分呈现帖子显示

<h2><%= link_to(post.title, post_path(post)) %></h2>
<div class="entrybody">
  <%=raw post.body_html %>
</div>
<div class="meta">
  <ul>
    <li class="date">Posted on <%= format_post_date(post.published_at) %></li>
    <li class="comments"><%= link_to(pluralize(post.approved_comments.size, "comment"), post_path(post, :anchor => 'comments')) %></li>
    <% unless post.tags.empty? -%>
    <li class="tags">Tagged <%= linked_tag_list(post.tags) %></li>
    <% end -%>
  </ul>
</div>

Rake routes 耙路线

  forem        /forums                                         {:to=>Forem::Engine}
        new_user_session GET    /users/sign_in(.:format)                        {:action=>"new", :controller=>"devise/sessions"}
            user_session POST   /users/sign_in(.:format)                        {:action=>"create", :controller=>"devise/sessions"}
    destroy_user_session DELETE /users/sign_out(.:format)                       {:action=>"destroy", :controller=>"devise/sessions"}
           user_password POST   /users/password(.:format)                       {:action=>"create", :controller=>"devise/passwords"}
       new_user_password GET    /users/password/new(.:format)                   {:action=>"new", :controller=>"devise/passwords"}
      edit_user_password GET    /users/password/edit(.:format)                  {:action=>"edit", :controller=>"devise/passwords"}
                         PUT    /users/password(.:format)                       {:action=>"update", :controller=>"devise/passwords"}
cancel_user_registration GET    /users/cancel(.:format)                         {:action=>"cancel", :controller=>"devise/registrations"}
       user_registration POST   /users(.:format)                                {:action=>"create", :controller=>"devise/registrations"}
   new_user_registration GET    /users/sign_up(.:format)                        {:action=>"new", :controller=>"devise/registrations"}
  edit_user_registration GET    /users/edit(.:format)                           {:action=>"edit", :controller=>"devise/registrations"}
                         PUT    /users(.:format)                                {:action=>"update", :controller=>"devise/registrations"}
                         DELETE /users(.:format)                                {:action=>"destroy", :controller=>"devise/registrations"}
           admin_session POST   /admin/session(.:format)                        {:action=>"create", :controller=>"admin/sessions"}
       new_admin_session GET    /admin/session/new(.:format)                    {:action=>"new", :controller=>"admin/sessions"}
      edit_admin_session GET    /admin/session/edit(.:format)                   {:action=>"edit", :controller=>"admin/sessions"}
                         GET    /admin/session(.:format)                        {:action=>"show", :controller=>"admin/sessions"}
                         PUT    /admin/session(.:format)                        {:action=>"update", :controller=>"admin/sessions"}
                         DELETE /admin/session(.:format)                        {:action=>"destroy", :controller=>"admin/sessions"}
     preview_admin_posts POST   /admin/posts/preview(.:format)                  {:action=>"preview", :controller=>"admin/posts"}
             admin_posts GET    /admin/posts(.:format)                          {:action=>"index", :controller=>"admin/posts"}
                         POST   /admin/posts(.:format)                          {:action=>"create", :controller=>"admin/posts"}
          new_admin_post GET    /admin/posts/new(.:format)                      {:action=>"new", :controller=>"admin/posts"}
         edit_admin_post GET    /admin/posts/:id/edit(.:format)                 {:action=>"edit", :controller=>"admin/posts"}
              admin_post GET    /admin/posts/:id(.:format)                      {:action=>"show", :controller=>"admin/posts"}
                         PUT    /admin/posts/:id(.:format)                      {:action=>"update", :controller=>"admin/posts"}
                         DELETE /admin/posts/:id(.:format)                      {:action=>"destroy", :controller=>"admin/posts"}
     preview_admin_pages POST   /admin/pages/preview(.:format)                  {:action=>"preview", :controller=>"admin/pages"}
             admin_pages GET    /admin/pages(.:format)                          {:action=>"index", :controller=>"admin/pages"}
                         POST   /admin/pages(.:format)                          {:action=>"create", :controller=>"admin/pages"}
          new_admin_page GET    /admin/pages/new(.:format)                      {:action=>"new", :controller=>"admin/pages"}
         edit_admin_page GET    /admin/pages/:id/edit(.:format)                 {:action=>"edit", :controller=>"admin/pages"}
              admin_page GET    /admin/pages/:id(.:format)                      {:action=>"show", :controller=>"admin/pages"}
                         PUT    /admin/pages/:id(.:format)                      {:action=>"update", :controller=>"admin/pages"}
                         DELETE /admin/pages/:id(.:format)                      {:action=>"destroy", :controller=>"admin/pages"}
          admin_comments GET    /admin/comments(.:format)                       {:action=>"index", :controller=>"admin/comments"}
                         POST   /admin/comments(.:format)                       {:action=>"create", :controller=>"admin/comments"}
       new_admin_comment GET    /admin/comments/new(.:format)                   {:action=>"new", :controller=>"admin/comments"}
      edit_admin_comment GET    /admin/comments/:id/edit(.:format)              {:action=>"edit", :controller=>"admin/comments"}
           admin_comment GET    /admin/comments/:id(.:format)                   {:action=>"show", :controller=>"admin/comments"}
                         PUT    /admin/comments/:id(.:format)                   {:action=>"update", :controller=>"admin/comments"}
                         DELETE /admin/comments/:id(.:format)                   {:action=>"destroy", :controller=>"admin/comments"}
    undo_admin_undo_item POST   /admin/undo_items/:id/undo(.:format)            {:action=>"undo", :controller=>"admin/undo_items"}
        admin_undo_items GET    /admin/undo_items(.:format)                     {:action=>"index", :controller=>"admin/undo_items"}
                         POST   /admin/undo_items(.:format)                     {:action=>"create", :controller=>"admin/undo_items"}
     new_admin_undo_item GET    /admin/undo_items/new(.:format)                 {:action=>"new", :controller=>"admin/undo_items"}
    edit_admin_undo_item GET    /admin/undo_items/:id/edit(.:format)            {:action=>"edit", :controller=>"admin/undo_items"}
         admin_undo_item GET    /admin/undo_items/:id(.:format)                 {:action=>"show", :controller=>"admin/undo_items"}
                         PUT    /admin/undo_items/:id(.:format)                 {:action=>"update", :controller=>"admin/undo_items"}
                         DELETE /admin/undo_items/:id(.:format)                 {:action=>"destroy", :controller=>"admin/undo_items"}
            admin_health        /admin/health(/:action)(.:format)               {:action=>"index", :controller=>"admin/health"}
              admin_root        /admin(.:format)                                {:controller=>"admin/dashboard", :action=>"show"}
                archives GET    /archives(.:format)                             {:action=>"index", :controller=>"archives"}
                    page GET    /pages/:id(.:format)                            {:action=>"show", :controller=>"pages"}
                         GET    /:year/:month/:day/:slug/comments(.:format)     {:year=>/\d{4}/, :month=>/\d{2}/, :day=>/\d{2}/, :controller=>"comments", :action=>"index"}
                         POST   /:year/:month/:day/:slug/comments(.:format)     {:year=>/\d{4}/, :month=>/\d{2}/, :day=>/\d{2}/, :controller=>"comments", :action=>"create"}
                         GET    /:year/:month/:day/:slug/comments/new(.:format) {:year=>/\d{4}/, :month=>/\d{2}/, :day=>/\d{2}/, :controller=>"comments", :action=>"new"}
                         GET    /:year/:month/:day/:slug(.:format)              {:year=>/\d{4}/, :month=>/\d{2}/, :day=>/\d{2}/, :controller=>"posts", :action=>"show"}
         formatted_posts GET    /posts.:format                                  {:controller=>"posts", :action=>"index"}
                   posts GET    /(:tag)(.:format)                               {:controller=>"posts", :action=>"index"}
                    root        /                                               {:controller=>"posts", :action=>"index"}

As Azolo pointed out, Enki defines its own post_comments_path helper. 正如Azolo指出的那样, Enki定义了自己的post_comments_path助手。 The problem is Enki's doesn't take an options parameter like the Rails helpers do. 问题是Enki没有采用像Rails助手这样的选项参数。 So form_for ends up passing an option of :format => nil , expecting the Rails-style helper. 所以form_for最终传递了一个选项:format => nil ,期待Rails风格的帮助器。

You can either fix this by adding options = {} to the end of Enki's post_comments_path , or by giving form_for an explicit URL: 你可以通过在Enki的post_comments_path末尾添加options = {}来解决这个问题,也可以通过给form_for一个明确的URL来解决这个问题:

form_for(@comment, :url => post_comments_path(@post), :method => :post)

So I was looking at your error, and this error popped out at me. 所以我看着你的错误,这个错误突然出现在我面前。

app/helpers/url_helper.rb:9:in `post_comments_path'

I thought maybe you declared that helper, but actually it's actually declared in Enki check it out: 我想也许你宣布了帮助,但实际上它实际上是在Enki宣布检查出来的:

def post_comments_path(post)
  post_path(post) + "/comments"
end

So, that's why you're getting that argument error. 所以,这就是为什么你得到那个参数错误。 I don't know why they would override it like that but they did. 我不知道他们为什么会这样覆盖它,但他们确实如此。
Here's the source on Github 这是Github上的源代码

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM