1

form_for ループを使用して、コントローラの create メソッドにデータを送信しています。form_for には、テーブルのどのフィールドにも関連付けられていない text_fields がいくつかあります。基本的には、データを入力して create メソッドの追加のロジックに使用したい自由なテキスト フィールドです。

フォームを送信すると、作成の最初の行がヒットします。

@user = User.new(params[:user])

次のエラーが発生します (:test1 は、モデルに関係のないフォーム フィールドです)。

Can't mass-assign protected attributes: test1

モデルに関係のないテキスト フィールドを送信していることが原因であることがわかりました。次のようなあらゆる種類の奇妙な構文を試しました。

User.new(params.require(:user).except(:test1))そしてUser.new(params[:user].except(:test1))無駄に。

オンラインでいくつかのソースを見つけましたが、except または delete メソッドを使用できると述べていますが、特に User.new() では、それを機能させることができないようです。

私は新しいものの外でもそれを試しました:

params.delete(:test1)
@user = User.new(params[:xref_ability])

また、最終的に作成時に追加の属性を読み取れるようにしたいので、except() または delete() がすべての問題を解決するとは思いません (機能した場合)。したがって、コントローラークラスとモデルクラスで attr_accessor :test1 を試しましたが、メソッドに属性を読み取る権限が与えられることを期待していましたが、成功しませんでした。

また、モデルの attr_accessible に追加しようとしたところ、エラーが発生しました。

unknown attribute: test1

他の提案はありますか?

4

3 に答える 3

1

仮想属性を使ってみては?DB のフィールドにマップされていない場合は、それらを使用するのが理にかなっています。

RB には、このトピックに関する優れた Railscast があります: http://railscasts.com/episodes/16-virtual-attributes-revised

于 2013-09-06T22:47:56.160 に答える
1

おそらくattr_accessible :test1User モデルに が必要です。試してみてください。

于 2013-09-06T21:07:51.107 に答える
0

データベースに存在しないため、不明な属性エラーが発生しています。

データベースにtest1を作成するか(移行で追加...)、次のようにモデルに追加する必要があります。

attr_accessor :test1

この方法では、オブジェクトに値が含まれますが、データベースには保存されません。保存する必要がある場合は、データベースに追加し、@Miguelgraz が以前に言ったように attr_accessible を使用します。

于 2013-09-06T22:47:10.510 に答える