2013-09-24 17 views
0


我有以下操作方法:的行動呼籲在Rails的工作原理

class CommandsController < ApplicationController 
. 
. 
. 
    def usersList 
    @command = Command.find_by(id: params[:id]) 
    @users_list = @command.user_commands.paginate(page: params[:page], per_page: 10) 
    end 
end 

以下觀點:users_list.html.erb

<% provide(:title, "Command list") %> 
<h1>Lista Utenti per <%= @command.content %></h1> 

<%= will_paginate @users_list %> 

<ul class="users"> 
    <% @users_list.each do |user| %> 

    <li><%= user.name.capitalize %>, <%= user.email %></li> 

<% end %> 
</ul> 

而在routes.rb中

get 'commands/:id/usersList' => 'commands#users_list', as: :list 

現在我不明白爲什麼要去lochalhost:3000/commands/1/usersList我收到以下錯誤:

undefined method `content' for nil:NilClass 

refered排隊<h1>Lista Utenti per <%= @command.content %></h1> 它爲什麼這樣做呢?當我調用一個動作時,在呈現頁面之前,然後在執行該方法內的代碼之後?

我通過更改名稱解決了這個問題:usersList --> userslist然後users_list.html.erb --->userslist.html.erb並在routes.rb中---->get 'commands/:id/userslist' => 'commands#userslist', as: :list 那我就不明白了命名約定......如果我宣佈一個動作usersList應該如何我重命名相關視圖?

+0

你確定'Command.find_by(id:params [:id])'實際上會返回一些東西嗎?如果在控制檯中執行它會發生什麼? – Miotsu

+0

我在控制檯中執行它,並且都運行正常,它檢索到相關命令對象 – zer0uno

+0

我通過更改名稱來解決問題: – zer0uno

回答

0

您應該將您的動作名稱更改爲users_list