ruby-on-rails - Rails - 在 .create 上传递额外的变量

标签 ruby-on-rails ruby-on-rails-4

我正在尝试使用瘦 Controller 和胖模型来实践,但是为了做到这一点,我发现自己需要将额外的变量传递到 .create 方法中。

例如,我有:

@app =  App.new(app_params)

def app_params
  params.require(:app).permit( :name,  :description)
end

现在我还想传递一个 session 持有的 user_id,以及对权限组的引用。所以希望类似于以下伪代码:
@app = App.create(app_params, session[:user_id], app_permission_id)

user_id 和 app_permission_id 不会被持久化,但可以使用我希望在模型中的 after_create 回调中的某个地方,这样我就可以做一些进一步的工作,例如创建与调用用户关联的创建日志条目.

我不太热衷于将它们作为隐藏字段添加到表单中(以向用户隐藏实现)。我认为有一种可能的方法使用 .merge?如果是这样,我想我会使用虚拟属性将它们拉出来。

任何关于最佳/最干净方法的建议将不胜感激。我想我更喜欢以某种方式覆盖 .create 方法(但仅限于 Controller 端最干净的实现)。

最佳答案

如果你是 app_params 应该总是包含 user_id 和 app_permission_id

你应该这样做

def app_params
  params.require(:app).permit( :name,  :description).merge(user_id: session[:user_id], app_permission_id: app_permission_id)
end

否则如果它不应该一直包含这个

你应该这样做
app_params.merge(user_id: session[:user_id], app_permission_id: app_permission_id) #as mentioned by Vapire in his answer

关于ruby-on-rails - Rails - 在 .create 上传递额外的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24746695/

相关文章:

CSS 未在 heroku Hartl Ch 10 中加载

javascript - rails : How to call a Javascript function from HTML in render :pdf

ruby-on-rails - 我们如何在 swagger rspecs 中传递 header

ruby-on-rails - 如何根据 'created_at'字段的月份设置条件

ruby-on-rails - 什么 ActiveRecord 查询将返回具有所有给定的 has_many 关系集的所有记录?

ruby-on-rails-4 - 在 Rails 中使用 Friendly ID gem,如何重新生成 slug 字段?

ruby-on-rails - 将对象放入 aws S3 ruby​​ 中的特定文件夹

ruby-on-rails-4 - Rails 4-Spree-2.1中涉及强大的参数概念

javascript - Rails 在 HAML + Coffeescript 中使用数组

ruby-on-rails - Sidekiq 用户界面 : Internal Server Error production