【发布时间】:2014-10-23 23:10:03
【问题描述】:
我有一个会话变量 (user_id),我想将它作为外键包含在用户插入的记录中。我将表单值全部通过表单提交到我的控制器的 entity.update(params) 方法,使用默认参数定义没有问题。该代码看起来像
def brand_params
@brand_params = params.require(:brand).permit(:name, :brand_type, :profile_id)
end
更新方法是这样的
if @brand.update(brand_params)
format.html { redirect_to @brand, notice: 'Widget was successfully updated.' }
format.json { render :show, status: :ok, location: @brand }
else
format.html { render :edit }
format.json { render json: @brand.errors, status: :unprocessable_entity }
end
现在我想将 :profile_id 会话变量附加到 @brand_params 并在此处跟随其他线程,我尝试了一个 setter 方法:
def set_brand_params(key, val)
if @brand_params != nil
@brand_params[key] = val
end
end
但是,调用它时,@brand_params 始终为零。尝试直接添加到 brand_params 哈希是行不通的,因为它是一种更好的方法。如果有更好的方法来满足这个(我假设是常见的)用例,我全神贯注!否则,我想知道为什么 var 始终为零,尽管在这种情况下,至少 brand_params 方法将其视为已定义且具有价值。我在Adding a value to ActionController::Parameters on the server side得到了这个解决方案
这里是按要求更新的方法:
def update
puts "update"
set_brand_params("profile_id", session[:prof])
respond_to do |format|
if @brand.update(brand_params)
format.html { redirect_to @brand, notice: 'Widget was successfully updated.' }
format.json { render :show, status: :ok, location: @brand }
else
format.html { render :edit }
format.json { render json: @brand.errors, status: :unprocessable_entity }
end
end
end
【问题讨论】:
-
如果您在调用
brand_params之前使用set_brand_parmas,是的,@brand_params 未定义(无)。 -
是的,如果我将@brand_params 变量移动到构造函数(这里是new())它不是零,所以这就是答案!我仍然不清楚最佳实践,因为现在这个受保护的变量是公开的......但已经足够了。
-
拜托,你能编辑问题并添加整个方法更新吗?
标签: ruby-on-rails parameters actioncontroller