2

让我感到困惑的是,例如,如果我们index在控制器中定义了一个方法,并且在index其中有一个实例变量@var,我们可以@var直接在 index.html.erb 中访问而无需指定任何内容。那么视图是控制器的一部分吗?视图中的 html.erb 文件可以访问控制器中的局部变量吗?

4

2 回答 2

1

控制器是处理来自浏览器的传入请求同时处理模型中的数据的事件处理程序。控制器将处理来自用户交互的请求,即键盘输入或来自鼠标的单击事件。然后在视图中输出控制器的响应。因此,如果您UserController有一个index动作,index.html.erb如果您想users通过循环访问它们,您将有某种类似的设置。

控制器

class UsersController < ApplicationController
def index
   @users = User.all #Returns an array of all users

   respond_to do |format|
   format.html { render "users/_users", :locals => { :users=> @user } }} 

    end

索引.html.erb

<table>
  <thead>
  <tr>
    <th>Name</th>
  </tr>
  </thead>
  <tbody>
  <% @users.each do |user| %>
      <tr>
        <td> user.name</td>
      </tr>
  <% end %>
  </tbody>
</table>

更新:

好的,所以我认为您的意思是发送一个局部变量并在视图中访问它。此外,众所周知,使用局部变量似乎是可取的,可以在应用程序范围内使用以避免依赖关系。因此,如果是这种情况,并且您想将局部变量传递到一个局部变量中,您将使用:locals它来保持它的清洁。示例如下:

render :partial => 'my_partial', :locals => { :some_variable => some_variable, :value=> 'value' }

希望这可以解决问题

于 2013-04-10T02:51:13.510 回答
0

在 Rails 中,视图是与控制器分开的对象。控制器在渲染视图时将其实例变量包含到视图的上下文中。您应该认为这是一种特殊的参数传递约定,而不是违反封装(访问控制器私有变量的视图)。Rails 使用这个约定来避免将视图的(片段)结构反映到从控制器传递到视图的字段中。由于值以相对非结构化的方式从控制器传递到视图,因此我们可以灵活地重构视图,而不必对控制器造成太大的改变。

于 2013-04-10T02:57:58.610 回答