1. ホーム
  2. ruby-on-rails

[解決済み] params[:something]からフィールドを削除する方法

2022-07-11 15:14:35

質問

Usersモデル用の登録フォームで、companyに文字列の値を取ります。しかし、先日、usersがcompanyに所属するように変更しました。そのため、UsersモデルにCompanyのオブジェクトを渡す必要があります。

フォームから文字列の値を使って、Companyのオブジェクトを取得したい。

@user.company = Company.find_by_name(params[:company])

上記は動作すると思いますが、私が呼び出すと、フォームがモデルに :company (文字列) を渡しています。

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

したがって、Userモデルに渡す前に:companyパラメータを削除する方法を知りたいのです(方法が見つかりません)。

どのように解決するのですか?

Rails 4/5 - 編集された答え (コメント参照)

この質問が書かれてから、Railsの新しいバージョンには を抽出します! を除く など。

new_params = params.except[the one I wish to remove]

これは、必要なすべてのパラメータをコピーに「取り込む」安全な方法です。ただし、渡された元のパラメータを破棄する必要はありません(デバッグやコードのメンテナンスが非常に困難になるため、これは良いことではありません)。

または、例えばコピーせずに直接渡すこともできます。

@person.update(params[:person].except(:admin))

extract! (演算子!を持つ)は元を修正するので、より注意して使ってください!

オリジナルの回答

Hashからキー/値のペアを削除するには、次のようにします。 Hash#delete :

params.delete :company

params[:user]に含まれていれば、これを使うことになります。

params[:user].delete :company