Ruby on Rails - params是方法还是哈希?

时间:2017-05-19 11:49:39

标签: ruby-on-rails ruby

所以,我正在尝试Ruby on Rails指南here入门部分。

我在本教程中不理解line。引用它:

  

params方法是表示来自表单的参数(或字段)的对象。

我确实在rails中有过一些经验,我总是认为params是一个哈希。但在这里他们称之为method which is an object

paramsmethod还是hash?另外,在ruby中,方法也是对象吗?

3 个答案:

答案 0 :(得分:11)

  • params方法,可返回ActionController::Parameters 对象。想想这样的事情:

    def params
      ActionController::Parameters.new(...)
    end
    

    示例(控制器或视图中的某个位置)

    puts params
    #=> <ActionController::Parameters ...>
    puts params.is_a? Object
    #=> true
    
  • Ruby中的方法始终返回(注意:nil也是),除非方法未定义。请记住,即使您的代码中没有看到params已经由Rails定义,

  • 每个&#34;返回值&#34; Ruby中的方法是一个对象。即使nil值为NilClass 对象。整数,字符串,数组和散列也是对象。为什么?因为eveeeeery事物从Object 继承/开始。

  • 如果&lt; Rails 5.1:

    • ActionController::Parameters继承自Hash ,这意味着您可以使用所有Hash 方法({{ 3}})。

      示例:

      params.sort ...
      params.each ...
      params.has_key?(:controller)
      
  • 但现在在&gt; = Rails 5.1:

    • ActionController::Parameters NO LONGER 继承自Hash ,因此您可能会认为您不能再使用上述代码之类的方法了.sort.has_key?,但您仍然可以!因为ActionController::Parameters定义了自己的自定义方法&#34;看起来像&#34;来自Hash的方法。
      • 注意:并非所有哈希方法都在ActionController::Parameters中重新定义。您可以随意比较方法see Hash methods hereHERE,特别是sort方法,Hash方法未在ActionController::Parameters中重新定义,因此您可以&#39;在Rails&gt; = 5.1中再做params.sort

答案 1 :(得分:6)

  1. 描述有点截断。确切地说,它应该被理解为:

      

    params方法的返回值是[an] object ...

    方法不是对象,但是当您执行方法时,它总是返回一个对象。在这种情况下,params是一个方法,而不是一个对象,但有一个返回值,它是一个对象。

  2. 在旧版本的Rails中,// Slideshow var slideshow = function () { "use strict"; var paused = false; $('.arrowR').click(function () { paused = true; $('#slides > div:first') .fadeOut(1000) .next() .fadeIn(1000) .end() .appendTo('#slides'); }); $('.arrowL').click(function () { paused = true; $('#slides > div:last') .fadeIn(1000) .prependTo('#slides') .next() .fadeOut(1000) .end(); }); setInterval(function () { if (paused === false) { $('#slides > div:first') .fadeOut(1000) .next() .fadeIn(1000) .end() .appendTo('#slides'); } }, 5000); }; // Call Functions $(document).ready(function () { "use strict"; slideshow(); }); 的返回值曾经是哈希值,但现在,它不是哈希值。

答案 2 :(得分:2)

<?php class Main extends CI_Controller { public function index() { $this->login(); } public function login() { $this->load->view('login'); } public function members() { $this->load->view('members'); } public function login_validation() { //do validation here,load validation library $this->load->library('form_validation'); //setting rules for input data $this->form_validation->set_rules('email', 'Email', 'required'); $this->form_validation->set_rules('password', 'Password', 'required|md5'); if($this->form_validation->run()) { redirect('main/members'); } else { $this->load->view('login'); } } } 是一个返回对象的方法 - ActionController::Parameters的实例。

它有一些方法使它的行为很像哈希,但它比哈希更复杂。

  

另外,在Ruby中,方法也是对象吗?

Check this thread