Ruby on rails 从rails控制器返回值-困惑的Java程序员

Ruby on rails 从rails控制器返回值-困惑的Java程序员,ruby-on-rails,ruby-on-rails-3,return-value,Ruby On Rails,Ruby On Rails 3,Return Value,这里没有问题。我读到ruby中的“最后一个已计算语句”在返回时没有显式地写“return…”。 以下示例(来自本教程) class UsersController GETSuxSeriFiels def get_user_info(user) name = user.name email = user.email end “用户详细信息”将包含电子邮件的值,上述方法将默认返回最后一个值。控制器方法不会将值返回到您的视图中。相反,它将呈现的页面返回到请求来自的浏览器。 控制器自动调用re

这里没有问题。我读到ruby中的“最后一个已计算语句”在返回时没有显式地写“return…”。 以下示例(来自本教程)

class UsersController
现在在html.erb中,他们这样使用它

<ul id="users">
<% @users.each do |user| %>
  <%= render user %>
<% end %>
</ul>

所以我不必显式返回实例变量,它们(@users和@user)在我的视图中都可用。?这对于实例变量来说是唯一的,或者对于来自Java的局部变量来说也是可能的。

实例变量在视图中总是可用的。你不需要归还任何东西

下面是关于变量如何从控制器传递到视图的一个很好的解释:

这是控制器中的一个操作,实例变量initialized将在视图中可用。只需考虑一个案例,您就有了一些方法,叫做代码> GETSuxSeriFiels

def get_user_info(user)
  name = user.name
  email = user.email
end

“用户详细信息”将包含电子邮件的值,上述方法将默认返回最后一个值。

控制器方法不会将值返回到您的视图中。相反,它将呈现的页面返回到请求来自的浏览器。 控制器自动调用
render
调用相同名称的模板,这只是一种约定

您可以使用相同的行为编写如下控制器方法:

class UsersController < ApplicationController
  def index
    @users = User.all
    @user = User.new

    return render 'index'
end
class UsersController
由于上一次计算的值是自动返回的,因此这相当于:

class UsersController < ApplicationController
  def index
    @users = User.all
    @user = User.new

    render 'index'
  end
class UsersController
由于控制器自动调用相同名称的render,您可以完全删除它(除非您的模板与控制器方法的名称不同)

class UsersController

在一个控制器中有太多实例变量被认为是不好的做法,因此您可能希望手动调用渲染,并像下面这样传递局部变量:

class UsersController < ApplicationController
  def index
    users = User.all
    user = User.new

    render 'index', :locals => { :all_users => users, :new_user => user }
  end
class UsersController{:all_user=>users,:new_user=>user}
结束
访问前端的本地人:

<ul id="users">
  <% all_users.each do |user| %>
    <%= render user %>
  <% end %>
</ul>

Nice,很棒的帖子,带有到源代码的链接。我需要习惯所有的默认行为和自动操作。谢谢是的,它对于实例变量是唯一的。您将无法对局部变量执行相同的操作。
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>