为什么我的Rails模型自定义setter / getter方法失败了?

时间:2012-05-17 14:30:52

标签: ruby-on-rails-3

我在这里做错了什么?

我有一个我正在写的应用程序的模型叫做页面。这些属性是: 标题 网页类型 PAGE_URL

title和pagetype可以正常设置,但是我为page_url使用了自定义getter / setter。这是逻辑/模型:

class Page < ActiveRecord::Base

def page_url=()
    temp = self[:title]
    pageUrl = temp.gsub(" ", "_").downcase  
if self[:pagetype] == "home"
        pageUrl = "/"
    end
    self[:page_url] = pageUrl
end

def page_url
    self[:page_url]
end

end

这很简单 - &gt; page_url基于标题,所有空格都被替换,除非page_type ==“home”,然后设置为“/”。为了记录我不想使page_url虚拟,因为我需要它可以搜索并保存在数据库中。

不幸的是,无论是在rails控制台还是我的应用程序中,这都失败了。以下是我在控制台中调用setter方法的方法;

page1 = Page.new
page1.pagetype = "home"
page1.title = "this is a test"

page2 = Page.new
pager2.pagetype = "content"
page2.title = "this is another test"

#expected results should be
page1.page_url() 
=> "/"
page2.page_url()

但是我一直这样说:

page1.page_url()
=> nil

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

这些自定义setter和getter不会持久存储到数据库中。如果数据库中有列page_url,则可以使用callback设置值。例如。 before_save

class Page < ActiveRecord::Base
  before_save :set_page_url

  def set_page_url
    if self[:pagetype] == "home"
      self.page_url = "/"
    else
      self.page_url = self[:title].gsub(" ", "_").downcase
    end
  end
end