困惑于rails 4.0.0.0控制器方法定义user_name =(name)

时间:2013-06-29 07:25:28

标签: ruby-on-rails

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

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                 

2 个答案:

答案 0 :(得分:1)

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

使用setter,您要为属性设置一个值,使用getter检索该值。

Trying to learn / understand Ruby setter and getter methods

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

答案 1 :(得分: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