noobie rails问题。我读到了"最后评估的声明"在ruby中返回而没有明确写出" return ..."。 以下示例(来自本教程Rails and Javascript)
class UsersController < ApplicationController
def index
@users = User.all
@user = User.new
end
现在在html.erb中,他们就像这样使用它
<ul id="users">
<% @users.each do |user| %>
<%= render user %>
<% end %>
</ul>
所以我不必显式返回实例变量,我的视图中都可以使用它们(@users和@user)。这对于实例变量是唯一的,还是可以使用局部变量来自Java。
答案 0 :(得分:1)
答案 1 :(得分:0)
def index
@users = User.all
@user = User.new
user_detail = get_user_info(@users.last)
end
这是控制器中的一个动作,实际变量的实例变量将在视图中可用。只需考虑一个名为get_user_info
def get_user_info(user)
name = user.name
email = user.email
end
user_detail将包含email的值,上面的方法将返回默认的最后一个值。
答案 2 :(得分:0)
控制器方法不会向您的视图返回值。相反,它将呈现的页面返回到请求来自的浏览器。
控制器自动调用对同名模板的render
调用只是一种惯例。
您可以使用相同的行为编写这样的控制器方法:
class UsersController < ApplicationController
def index
@users = User.all
@user = User.new
return render 'index'
end
由于自动返回最后一个评估值,因此这是等效的:
class UsersController < ApplicationController
def index
@users = User.all
@user = User.new
render 'index'
end
由于控制器会自动调用相同名称的渲染,您可以完全删除它(除非您的模板名称与控制器方法不同)
class UsersController < ApplicationController
def index
@users = User.all
@user = User.new
end
在控制器中包含太多实例变量被认为是不好的做法,所以你可能想要手动调用渲染并传递这样的局部变量:
class UsersController < ApplicationController
def index
users = User.all
user = User.new
render 'index', :locals => { :all_users => users, :new_user => user }
end
访问前端的本地人:
<ul id="users">
<% all_users.each do |user| %>
<%= render user %>
<% end %>
</ul>