1

我在这里做错了什么?

我有一个我正在编写的应用程序的模型,称为页面。这些属性是:title pagetype 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

这相当简单 -> 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

我到底做错了什么?

4

1 回答 1

1

这些自定义的 setter 和 getter 不会持久化到数据库中。如果您的数据库中有列,则可以使用回调page_url设置值。例如: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
于 2012-05-17T14:48:47.947 回答