簡體   English   中英

Ruby on Rails屬性何時獲取其方法?

[英]When does a Ruby on Rails attribute get its methods?

我通過遷移向Ruby on Rails數據模型(Client)添加了一個屬性。 我在attr_accessible語句中將屬性(退伍軍人)添加到模型中。 我運行了遷移,因此該屬性顯示在db / schema.rb中。 我將該屬性添加到該特定對象的spec / factories工廠。

在模型的視圖中,我有這樣的事情:

<td><%= f.label :veteran %></td>

<% if @client.veteran %>

<td><%= f.radio_button :veteran, :true, :checked => true %>Yes</td>

<td><%= f.radio_button :veteran, :false %>No</td>

<% else %>

<td><%= f.radio_button :veteran, :true %>Yes</td>

<td><%= f.radio_button :veteran, :false, :checked => true %>No</td>

<% end %>

我的問題是:即使在控制器中,在新的,我做了Client.new,語句@ client.veteran給出了一個錯誤:NoMethodError:@client中未定義的方法老手

為什么ActiveRecord對退伍軍人的了解不會進入Client對象? 如何避免此錯誤? (我還應該補充說,在自動化測試中,Rspec和Cucumber中不會出現問題。)

UPDATE。 我現在明白我需要了

 attr_accessor :veteran

但我不明白為什么其他屬性在“attr_accessible”(白名單)中似乎沒問題,但不是這個(這是新的)。

Steve Turczyn,控制器代碼只是@client = Client.new。 我很確定這是我看到的錯誤。 我顯然需要更好地理解attr_accessor與attr_accessible。

您不需要在ActiveRecord::Base中使用attr_accessor ,Rails會自動為模式中的所有字段執行此操作。

您的視圖也只需要這樣:

<td><%= f.label :veteran %></td>

<td><%= f.radio_button :veteran, :true, checked: @client.veteran? %>Yes</td>

<td><%= f.radio_button :veteran, :false, checked: !@client.veteran? %>No</td>

至於你的問題

Ruby on Rails屬性何時獲取其方法?

答案是,在您運行遷移后,您已經可以訪問在其中創建的屬性。 如果出現類似錯誤,請重新啟動服務器,但不一定需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM