11

したがって、私はレールともちろんレール 4 の両方に慣れています。

これがコントローラーの下部にあるものです

def post_params
  params.require(:post).permit(:title, :content, :category)
end

これは問題なく動作しますが、私がやりたいことは、post_params メソッドで、または後でコントローラーで、これらのパラメーターに個別にアクセスする方法を考え出すことです。

具体的には、投稿を作成する際にパラメーターを使用する前に、:category 値を小文字に変更したいと思います (テーブル内のすべてのカテゴリーが小文字になるように)。

編集:おそらく、私の質問に対するより良い言い回しは、パラメーターを許可した後、後でそれらにアクセスして操作するにはどうすればよいかということです..いつものように params[:title] を使用できますか?

私が試してみました

params.require(:post).permit(:title, :content, :category)
params[:category].downcase

params.require(:post).permit(:title, :content)
params.require(:post).permit(:category).downcase

しかし、私は得るundefined method 'downcase'

4

4 に答える 4

9

このstrong_params関数は、コントローラーに操作する変数の「ホワイトリスト」を与えるだけです。これは実際にはセキュリティ上の目的であり、文字通り、アプリが params[:permitted_pa​​ram] にアクセスしてデータを保存できることを意味します。


あなたができることが2つあります:

--> post_params 関数を呼び出す前に、params[:category] ​​変数を編集します。

def create
    params[:category].downcase
    @post = Post.new(post_params)
    @post.save
end

--> @thiyaram が推奨する before_create 関数も使用できます:)

于 2013-10-16T09:24:35.593 に答える
8

より良いコールバックを使用before_createして値を更新できます。

お気に入り、

before_create :check_params

def check_params   
   self.category.downcase!     
end
于 2013-10-16T09:18:14.567 に答える
2

Rails 4 を使用している場合、これは機能しない可能性があります。改ざんしたパラメーターは、強力なパラメーターを使用して明示的にホワイトリストに登録したとしても、受け入れられなくなります。

Rails が変更を検出し、許可されないように見えます。

おそらくより良い方法は、コントローラー アクションのパラメーターから値を取得し、それらを小文字にすることです。

a = params([:model_name][:id])
a.downcase!
于 2015-09-22T22:28:38.210 に答える
1

これを行う:-

before_create :downcase_category

def downcase_category
 self.category.downcase!
end
于 2013-10-16T09:26:26.680 に答える