Rails 4:控制器和模型中有什么?

Rails 4: What Goes in Controller and Model?

我一直在阅读和观看一些关于学习的视频Rails 4. 所有教程都有自己的代码,所以在我看来,很容易理解。我似乎无法学到任何东西或记住一些东西,所以我决定使用我自己的代码,看看我是否可以遵循而不是使用他们的代码。

目前我理解的Controller对应的views:

# In my controller
def index
 @x = "I love Ruby"
end

在我看来 (index.html.erb)

<% = @x %> #=> I love Ruby

对于索引页来说,这个简单的事情就可以了。现在如果想在该视图的索引中引用其他方法调用怎么办?在控制器中:

def index
 @x = "I love Ruby"
end

仍在控制器内 class:

def languages_i_hate
 languages = %w[
                 Perl
                 PHP
                 C#
                 C++ ]
end

在我的 index.html.erb 中:

<%= These are the languages I hate to bits: #{languages_i_hate.upcase}!

我得到了未声明的方法或变量"languages_i_hate"

如何调用网页中的方法名?

您在这里要做的是访问视图中的控制器方法。当你这样做时,控制器方法被访问,就好像它是一个 helper 方法一样。通常控制器方法不能以这种方式使用,但您可以告诉控制器将它们作为助手提供。

http://apidock.com/rails/ActionController/Helpers/ClassMethods/helper_method

顺便说一句,当控制器中的方法不是 actions,即不对应 route/url 时,您应该将它们放在 protected 部分,按照惯例位于控制器的底部。这让 rails 和 reader 明白它们不是行动。

def index
 @x = "I love Ruby"
 languages_i_hate
end


def languages_i_hate
 @languages = %w[Perl PHP C#  C++ ]
end

index.html.erb:

<%= "These are the languages I hate to bits: #{@languages_i_hate}" %>

根据 rails 惯例,您必须使用 Helpers。另一种方法是在渲染模板时使用局部变量。

def index
 @x = "I love Ruby"
 render :template => "index.html.erb", :locals =>{:languages_i_hate => languages_i_hate}
end

def languages_i_hate
 languages = %w[
             Perl
             PHP
             C#
             C++ ]
 end

在我的 index.html.erb 中:

<%= These are the languages I hate to bits: #{languages_i_hate.upcase}!%>