如何从params中删除一个字段

我的registry单是用户模型的一个表单,它为公司提供一个string值。 不过,我刚刚做了一个改变,使用户属于公司。 因此,我需要将公司的一个对象传递给用户模型。

我想使用表单中的string值来获取公司的一个对象:

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

我相信上面的工作,但是forms是当我打电话时将:company(这是string)传递给模型:

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

因此,我想在将它传递给User模型之前知道(并且无法find)如何去除:company参数。

您可以使用Hash#delete哈希中的键/值对Hash#delete

 params.delete :company 

如果它包含在params [:user]中,那么你会使用这个:

 params[:user].delete :company 

你应该使用hash.except

 class MyController < ApplicationController def explore_session_params params[:explore_session].except(:account_id, :creator) end end 

它完成了两件事:允许您一次排除多于一个的密钥,并且不会修改原始的散列值。

 respond_to do |format| if params[:company].present? format.html {redirect_to(:controller=>:shopping, :action=>:index)} else format.html end 

这将从url中删除参数

正确的方法是使用strong_params

 class UsersController < ApplicationController def create @user = User.new(user_params) end private def user_params params.require(:user).permit(:name, :age) end end 

这样你可以更好地控制哪些参数应该传递给模型