1

我找不到任何参考资料来解释这两个定义之间的区别。像这样使用这两个定义的目的是什么?

def user_name=(name)
  user= User.where(:name => name)
  if user           
    self.user_id = user.id
  else              
    errors[:user_name] << "Invalid name entered"
  end               
end                 

def user_name       
  User.find(user_id).name if user_id
end                 
4

2 回答 2

1

第一个(带 = 符号)是属性设置器,第二个是属性获取器。

使用 setter,您正在为属性设置一个值,当您使用 getter 检索该值时。

尝试学习/理解 Ruby 的 setter 和 getter 方法

http://tmonrails.wordpress.com/2009/08/05/ruby-setter-and-getter-methods/

于 2013-06-29T07:31:15.720 回答
0

它是你在 Ruby 中编写 getter/setter 的方式。下面是 Java 中的样子:

// Java:                                |  // Ruby:
                                        |
public void setUserName(String name) {  |  def user_name=(name)
  ...                                   |    ...
}                                       |  end
                                        |
public String getUserName() {           |  def user_name
  ...                                   |    ...
end                                     |  end

所以基本上上面的代码所做的是,

def user_name=(name)
  # Check if the user with given user_name exists
  # If it exists, then set the user_id to that user
  # Otherwise mark an error
end                 

def user_name
  # Find the user with current user_id and return their name
end
于 2013-06-29T07:33:20.233 回答