1

私はここで何を間違っているのですか?

私が書いているアプリのモデルはpageと呼ばれています。これらの属性は次のとおりです。titlepagetypepage_url

タイトルとページタイプは通常どおりに設定できますが、page_urlにはカスタムのゲッター/セッターを使用しました。ロジック/モデルは次のとおりです。

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

これらのカスタムセッターとゲッターはデータベースに保持されません。データベースに列がある場合は、コールバック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 に答える