【问题标题】:Rails Link_to with Loop - RESTful routesRails Link_to with Loop - RESTful 路由
【发布时间】:2012-08-27 04:04:32
【问题描述】:

我希望您可以通过问答应用程序回答的问题。 Rails 还是很新的。它应该相当简单,但是每当我尝试创建链接列表以显示该点到循环中的 RESTful 路由时,都会遇到一个小问题。

这是控制器的代码:

users_controller.rb

def list
  @user = User.find(params[:id])
  @users = User.find(:all, :select => :name)
end

def quiz
  @user = User.find(params[:id])
  @users = User.find(:all, :select => :name)
end

这是视图的代码:

<% if current_user.admin? %>
  <ul>
    <%- @users.each do |link| %>
      <li><%= link_to link.name, quiz_user_path(@user, @quiz) %></li>
    <% end %>
  </ul>
<% end %>

这是路线的代码:

resources :users do 
  get 'quiz', :on => :member
end

我想做的是根据用户的名称生成单独的链接,然后链接到该特定用户的测验页面。在我看来,我很确定需要为代码更改某些内容。现在,我得到的只是一个指向当前用户的链接,在这种情况下是用户 4。(http://localhost:3000/users/4/quiz)

感谢您提供解决此问题的任何快速提示。

【问题讨论】:

  • 按照以下建议解决了这个问题,并对控制器进行了一点改动。将“@users = User.find(:all, :select => :name)”更改为“@users = User.find(:all)”。取出 :select => :name。瞧!再次感谢。

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

目前您为每个链接使用相同的@user 实例变量。相反,您需要使用循环中设置的变量。下面的代码应该可以按预期工作:

<% if current_user.admin? %>
  <ul>
    <%- @users.each do |user| %>
      <li><%= link_to user.name, quiz_user_path(user) %></li>
    <% end %>
  </ul>
<% end %>

为了清楚起见,我还将变量从 link 重命名为 user,因为您遍历的是用户而不是链接。

【讨论】:

  • 感谢您的帮助,但这会显示错误:“nil:NilClass 的未定义方法 `join'”。如果我改用@user,那么我会得到我之前所拥有的链接列表,这些链接都指向当前用户,在这种情况下是用户4。(localhost:3000/users/4/quiz)。非常感谢您的帮助!
  • 想通了。将“@users = User.find(:all, :select => :name)”更改为“@users = User.find(:all)”。取出 :select => :name。瞧!再次感谢。
【解决方案2】:

这是因为在您当前的路线图中quiz_user_path 只需要一个变量。尝试删除@quiz

【讨论】:

  • 谢谢。如果我改用@user,那么我会得到我之前所拥有的链接列表,这些链接都指向当前用户,在这种情况下是管理员用户 4。 (localhost:3000/users/4/quiz) 还有什么想法吗?
  • 想通了。将“@users = User.find(:all, :select => :name)”更改为“@users = User.find(:all)”。取出 :select => :name。瞧!再次感谢。
猜你喜欢
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 2011-04-09
  • 2023-03-08
相关资源
最近更新 更多