打印

params 参数读取问题

params 参数读取问题

在rails的某个controller里面经常可以看到这样的代码:
复制内容到剪贴板
代码:
  def show
    @article = Article.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @article }
    end
  end
在这里用params这个方法直接取到hash表里面的参数。

我的问题是我自己定义一个函数,在别的地方调用,然后要怎么传参数给它,它才能也用这个params取到参数呢?
比如:
复制内容到剪贴板
代码:
def myshow
  puts params[:id]
end
调用 myshow :id=>'test' 不行,提示参数个数不对,这个我也明白,参数个数确实不对,可是我看上面的 show 方法也是没有参数的么,它的params是怎么添加的,又是怎么调用的呢?

TOP

任何一个contrlloer都是继承自ActionController::Base,而params是ActionController::Base的一个内置对象,当客户端的请求到达服务器时,rails会从request中将参数取出来,放到params中。这样就可以通过params[:id]来获取了。
def keyword; end

TOP

我就是没找到这个 params 对象呢,我能自己填充这个params对象么?我试着在调用那个方法之前填充这个params,找了半天没找到方法

TOP

不能,如果你想加点东西在里面,那你在调用的时候多传几个参数就是了

它跟java 里的 request.getParameter("id")是一样的!
def keyword; end

TOP

哦,那我还是先不用这个方法吧,感觉 rails 用 params 这种方式蛮酷的 ,我用个 hash 表作为参数也行。

railschina.com 很不错,比 javaeye 强实在是太多,谢谢版主了

TOP

补充一下,@params 是早期版本的 Rails 对参数的封装,是一个 Hash,在1.1.6以后根据文档推荐用 params 而原 @params 废弃。在这里 params 作为 ActionController::Base 的一个实例方法存在。

理解到这一点的话,回到刚才你的问题,如果要在其他地方调用 params 的值,对应的做法有:
a) 将当前的 controller 实例传递过去
b) 讲 params 方法的返回值传过去,或者使用一个 dump
我就是鸡蛋黄……

TOP

[quote]
a) 将当前的 controller 实例传递过去
[/qutoe]

最好不要这么干
def keyword; end

TOP

我最后这么干的,还是直接用了个 hash 参数来解决:
复制内容到剪贴板
代码:
  def date_string params
    t = params[:time]
    c = params[:split]
    if c
      "#{t.year}#{c}#{t.month}#{c}#{t.day}"      
    else
      "#{t.year}年#{t.month}月#{t.day}日"
    end
  end

TOP