Rails Link_to with Loop - RESTful路由

时间:2012-08-27 04:04:33

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

我希望您能回答Q& A应用的问题。 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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

目前,您为每个链接使用相同的@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,因为您通过用户进行迭代而不是链接。