新手问题 Rails 中参数该怎么从 controller 里面传递到 view 里面,然后渲染页面啊

Blues · 2013年07月14日 · 最后由 Blues 回复于 2013年07月16日 · 5879 次阅读

最近看一个新项目,有点晕,因为以前没做过 ror,我不知道 rails 中 controller 中的参数是怎么传递到对应的 view 中去的。

另外一个是我还经常在 controller 中看到一个叫做 params 的 hash 参数,貌似这个 hash 里面总是有内容的,但是我搞不清楚它里面的数据是哪里来的。比如类似这样的代码:

def new
    @user = User.new
    if params[:email]
      @user.username = params[:email]
    end
    if params[:player]
      @player = true
    end
 end

这个里面的 params 就不知道是哪里来的,这是 UsersController 里面的 new 方法。

求大虾指点,谢谢!

二杆子来回答。

在 Controller 方法中赋一个实例变量,比如@user,Rails 就会把这些变量复制到对应的 view 里。

params 是从 HTTP 请求里提取出来的。比如你显示了一个 form,有 email 和 player 这些 field,submit 时这些 field 就会成为 params 的条目。

#1 楼 @merlinran “复制”是什么意思呢?就是说在 view 中可以直接使用@user这个实例变量吗?还是指的别的意思? 那如果他定义了多个实例变量呢?比如定义了@user,@book,Rails 会把这些变量都复制到对应的 view 中去吗?而且在 view 中都可以使用?

#1 楼 @merlinran 对第二个问题,我项目里面有很多的 new 方法里面有类似这样的代码:

def new
  @user = User.new
  if params[:email]
   @user.username = params[:email]
  end
  if params[:player]
   @player = true
  end
end

我想说的是,这个 new 方法对应的路由是 signup。那么用户点击“注册”,那么那个 http 过的 get 请求里面肯定是没有参数的对吗?因为不是要注册吗,怎么可能会有数据呢? 那为什么这里做一个判断呢?

#2 楼 @loveky

谢谢,我看了这个的,最后介绍到路由参数的时候,是说路由参数也是在 Params 的 hash 中对吗? 比如/user/1,是对应 show 方法的路由,1 是这个 user 的 id,那么在显示 user 信息的 show 方法中,我们可以使用 Params[:id] 去得到 user 的 id 对吗

需要 登录 后方可回复, 如果你还没有账号请 注册新账号