0

Railsのフォームで渡したい変数があります。

変数はモデルの一部ではないため、便利ではありません。変数を渡すことができるように、DBに列を作成したくありません。

次のような無害なものを使用して変数を渡そうとすると:

<input type="hidden" id="blah" value=<%= "#{@blah}" %> />

隠しフィールドはソースで正しく表示されますが、params ハッシュでは渡されません。Railsのようなもので適切にコーディングするとid="review_blah"、レビューモデルの一部であると想定され、モデルの一部ではないために怒られます。

何か対策はないでしょうか??モデルを再構築せずに、これらの状況で変数を簡単に渡す方法はありますか?

ありがとう

4

5 に答える 5

2

モデル内

attr_accessible :blah
于 2012-10-16T10:26:12.490 に答える
2

attribute_accessor仮想属性のを定義する必要があり、それattr_accessibleをフォームで使用できるようにリストに追加する必要があります。このような:

attr_accessor :blah

これにより、blahおよびblah=メソッドが使用可能になり、受信データを処理するために使用できます。

def blah=(data)
  #do sth. with the submited data here
end

この場合、「何とか」フィールドに入力されたデータに、ローカル変数「データ」としてアクセスできます。

次に、それを通常の形式の一部にする必要があります。

<%= f.hidden_field :blah, :value => <Your value here> %>

したがって、最後に行う必要があるのは、フィールドをattr_accessibleリストに追加することです。

attr_accessible :blah,....

そうしないと、一括割り当て保護のためにリクエストが失敗します。

于 2012-10-16T12:08:09.307 に答える
0
class ModelName
  attr_accessor :blah
end

@model = ModelName.new
@model.blah = "blah blah"
@model.blah  #will return "blah blah"

テーブルに列を含める必要はありません。ここ をチェックしてください

=form_for @model do |f|
  =f.hidden_field :blah

これにより、ハッシュblah内のオブジェクトが渡されます。params

于 2012-10-16T10:56:26.910 に答える
0

非常に醜いですが、次のようなことができます

<input name='x' type="hidden" id="blah" value=<%= "#{@blah}" %> />

あなたのコントローラーで

@model.save
  Model.update_all({:my_attribute => params['x']}, {:id => @model.id})
于 2012-10-16T10:37:46.223 に答える
0

入力パラメータの名前を設定する必要があると思います。そうしないと、Rails の params ハッシュに含まれません。

<input type="hidden" id="blah" value=<%= "#{@blah}" %> name="blah"/>
于 2012-10-16T10:39:22.523 に答える