2017-04-26 38 views
0
class MoviesController < ApplicationController 
    def index 
    @movies = Movie.all 
    end 

    def show 
    @movie = Movie.find(params[:id]) 
    @actors = @movie.actors 
    end 
end 

如上所示,在索引操作中使用了@movies,但在show操作中使用了@movie。如何確定它是複數還是單數?在Ruby on Rails中,爲什麼有時在控制器中,它是複數,有時它是單數?

+2

您需要閱讀它們映射到的Rails和http動詞中的動作。 [對於初學者](http://guides.rubyonrails.org/routing.html) –

回答

3

@movies@movie是您選擇如何定義的實例變量。在您的示例中,@movies已分配給您的模型中的所有電影集,因此它通常會分配一個複數變量。 @movie被分配到單個記錄,因此它通常被分配一個單一的變量。

無論你想要什麼,你都可以命名你的實例變量,但是Rails嚴格支持約定而不是配置。

+0

確實。不過這不僅僅是Rails的慣例。我期望'電影'能夠以任何語言在任何腳本中保存'電影'對象的集合(集合,數組,列表......)。 –

0

一般來說,如果是數組,則使用複數,單個對象時使用單數。

1

添加到@Dithanial的答案,正如您單擊顯示操作時可能很熟悉的那樣,只會顯示特定的記錄。因此,在下面的代碼片段:

def show 
    @movie = Movie.find(params[:id]) 
    @actors = @movie.actors 
end 

實例變量@movie發現基於它的ID和顯示內容的具體項目。

0

在索引 - 你得到所有的電影,這樣你可以列出所有的電影。

在其他控制器方法中 - 通常是編輯單電影

@movies vs @movies實際上並不重要。你可以命名它@banana。然而,有很多例如文件名(模型=單數,控制器=複數)和活動記錄關係(參考),其中多個重要

相關問題