用于“/ posts / 7 / up-vote”的未定义方法`stringify_keys':字符串

时间:2014-09-23 17:27:20

标签: ruby-on-rails

我收到此错误:

NoMethodError - undefined method `stringify_keys' for "/posts/7/up-vote":String:

这是我的代码:

<% if policy(Vote.new).create? %>
    <div class="vote-arrows pull-left">
    <div if vote = current_user.vote(post) %>
        <%= link_to [post, Vote.new], post_up_vote_path(post), class: 'btn btn-primary', method: :up_vote do %>
            <i class = "glyphicon glyphicon-chevron-up #{(current_user.voted(post) && current_user.voted(post).up_vote?) ? 'voted' : '' }" ></i>&nbsp; Upvote
            <strong><%= post.points %></strong>
        <% end %>

    <% else %>
        <%= link_to [post, vote], post_down_vote_path(post), class: 'btn btn-danger', method: :down_vote do %> <i class = "glyphicon glyphicon-chevron-down #{(current_user.voted(post) && current_user.voted(post).down_vote?) ? 'voted' : '' }"></i>;nbsp; Downvote
    <% end %>
        </div>
<% end %>

我收到了这一行的错误:

<%= link_to [post, Vote.new], post_up_vote_path(post), class: 'btn btn-primary', method: :up_vote do %>
            <i class = "glyphicon glyphicon-chevron-up #{(current_user.voted(post) && current_user.voted(post).up_vote?) ? 'voted' : '' }" ></i>&nbsp; Upvote

非常感谢任何帮助......

2 个答案:

答案 0 :(得分:3)

尝试逐行浏览您发布的代码并查找错误。这里有一些要检查:

  <!-- Mixing HTML and Ruby on this line -->
  <div if vote = current_user.vote(post) %>

link_to链接需要一些爱。仔细阅读文档并特别注意:

  • :method
  • 的有效HTTP谓词值
  • 路径只需指定一次
这里有

link_to个文档:http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

您可能需要花一些时间来缩进if/else/ends缩进,因为这样可以更轻松地发现语法错误。

答案 1 :(得分:0)

link_to来电的格式为:

link_to "The text in the link", the_path, hash_of_options

第一个参数必须是文本是Sergio所说的“link_to必须接受标签作为其第一个参数”。所以,像:

<%= link_to "Up-vote the post" , post_up_vote_path(post), class: 'btn btn-primary', method: :up_vote do %>

你给它一个路径(或一个可以转换为路径的数组)作为两个主要参数。

查看方法的文档:http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

请注意,您的链接包含一个图标,该图标可能取代“标签”,因此您的标签可能只是一个空字符串。