所以,我正在尝试Ruby on Rails指南here的入门部分。
我在本教程中不理解line。引用它:
params方法是表示来自表单的参数(或字段)的对象。
我确实在rails中有过一些经验,我总是认为params
是一个哈希。但在这里他们称之为method which is an object
。
params
是method
还是hash
?另外,在ruby中,方法也是对象吗?
答案 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 here和HERE,特别是sort
方法,Hash
方法未在ActionController::Parameters
中重新定义,因此您可以&#39;在Rails&gt; = 5.1中再做params.sort
。答案 1 :(得分:6)
描述有点截断。确切地说,它应该被理解为:
params
方法的返回值是[an] object ...
方法不是对象,但是当您执行方法时,它总是返回一个对象。在这种情况下,params
是一个方法,而不是一个对象,但有一个返回值,它是一个对象。
在旧版本的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中,方法也是对象吗?