我点击了Enki blogging gem中的评论链接(发布,未阅读,评论),它给了我这个错误消息
ArgumentError in Posts#show
wrong number of arguments (2 for 1)
Extracted source (around line #27):
但我无法弄清楚它发送的两个论点是什么。请注意,我已经创建了一个没有评论的帖子。
这是控制器动作节目
def show
@post = Post.find_by_permalink(*([:year, :month, :day, :slug].collect {|x| params[x] } << {:include => [:approved_comments, :tags]}))
@comment = Comment.new
end
这是我点击views / posts / index.html.erb进行评论的链接
<li class="comments"><%= link_to(pluralize(post.approved_comments.size, "comment"), post_path(post, :anchor => 'comments')) %></li>
这是屏幕上的错误消息。有什么建议我可以去试图找出发生了什么?
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)>'
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
更新
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 -%>
在应用视图中部分呈现帖子显示
<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>
耙路线
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"}
答案 0 :(得分:4)
正如 Azolo 所指出的那样, Enki 定义了自己的post_comments_path
助手。问题是Enki没有采用像Rails助手这样的选项参数。所以form_for
最终会传递:format => nil
的选项,期待Rails风格的帮助。
您可以通过将options = {}
添加到Enki post_comments_path
的末尾,或者通过给form_for显式网址来解决此问题:
form_for(@comment, :url => post_comments_path(@post), :method => :post)
答案 1 :(得分:0)
所以我看着你的错误,这个错误突然出现在我身上。
app/helpers/url_helper.rb:9:in `post_comments_path'
我想也许你宣布了那个助手,但实际上它实际上是在Enki
中宣布的,请查看:
def post_comments_path(post)
post_path(post) + "/comments"
end
所以,这就是为什么你得到那个参数错误。我不知道他们为什么会这样覆盖它,但他们确实如此 这是source on Github