2016-04-09 10 views
0

私が達成したいことは、次のとおりです。オブジェクトが新しいアクションで生成されるとき、モデルの1つの属性にデフォルト値を割り当てたいが、編集アクションではもちろん入力済みの値を使用したい。一例として、以下の単純化したモデルを考えてみましょう:RoRモデルの属性にデフォルト値を追加する方法を教えてください。

class Person < ActiveRecord::Base 
    validates :salary, :presence => true 
    validates :rank, :presence => true 
end 

_form.html.erbで:

<%= form_for(@person) do |f| %> 
    <%= f.text_field :salary %> # note 1 
    <%= f.hidden_field :rank %> 
<%= end %> 

これは新しいアクションである場合(つまり、私はこの人物オブジェクトを作成するつもりです)、私は給与を設定し、特定の値としてランクしたい(ただし、ランクはデフォルト値以外の値に変更される可能性があるとします)。しかし、編集アクションでは、オブジェクトの以前に格納された値を表示したいだけです。それを行う良い習慣は何ですか?

P.S.私は<%= f.text_field :salary, :value => 100000 %>を実装してnote 1という行に値を書き込もうとしましたが、そのための問題は編集アクションであり、この値も使いません。

+0

'<%= f.text_field:給与、値:(@ person.new_record 100000:??person.salary @)%>は、' - ん意味あり? – dp7

+0

これは私の最終的な解決策ですが、RoRがこのケースを考慮していると考えていました。定期的な回答にしてみませんか? – TimeString

+0

これはあなたのために機能しましたか? – dp7

答えて

1

これを行うには2通りの方法があります。最初に、オブジェクトを初期化するときにコントローラのデフォルトを設定します。そうすれば、ビューはneweditの両方で同じように動作します。

ビューはデフォルトを知る必要はなく、どちらの場合でもレコードに設定された値を使用します。

データベースに設定したい安定したデフォルト値があれば、Railsはオブジェクトを初期化するときにその値を使用します。あなたの移行は次のようになります。@Kristjanが示唆したように

class CreatePeople < ActiveRecord::Migration 
    def up 
    create_table :people do |t| 
     t.integer :salary, default: 100000, null: false 
    end 
    end 
end 
Person.new 
#=> #<Person:0x000000 salary: 100000> 
1

、あなたのデシベルのデフォルト値を持っているか、コントローラの中でそれを初期化することができます。

次のように、ビューでこれを扱うことができます。

<%= f.text_field :salary, value: (@person.new_record? ? 100000 : @person.salary) %> 
関連する問題