如何在Rails的.create方法中传递其他变量?

2026-04-11 15:401阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计417个文字,预计阅读时间需要2分钟。

如何在Rails的.create方法中传递其他变量?

我正在尝试使用瘦控制器和胖模型,但为了实现这一点,我需要将其他变量传递给.create方法。例如,我在哪里:@app=App.new(app_params)def app_params params.require(:app).permit(:name, 描述)

我正在尝试使用瘦控制器和胖模型,但是为了做到这一点,我发现自己需要将其他变量传递给.create方法.

所以例如我在哪里:

@app = App.new(app_params) def app_params params.require(:app).permit( :name, :description) end

现在我还想传递一个会话持有user_id,以及对权限组的引用.所以希望像下面的伪代码:

@app = App.create(app_params, session[:user_id], app_permission_id)

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

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

任何关于最佳/最干净方法的建议都将非常感激.我想我更喜欢以某种方式覆盖.create方法(但仅限于控制器端最干净的实现).

如何在Rails的.create方法中传递其他变量?

如果您是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

本文共计417个文字,预计阅读时间需要2分钟。

如何在Rails的.create方法中传递其他变量?

我正在尝试使用瘦控制器和胖模型,但为了实现这一点,我需要将其他变量传递给.create方法。例如,我在哪里:@app=App.new(app_params)def app_params params.require(:app).permit(:name, 描述)

我正在尝试使用瘦控制器和胖模型,但是为了做到这一点,我发现自己需要将其他变量传递给.create方法.

所以例如我在哪里:

@app = App.new(app_params) def app_params params.require(:app).permit( :name, :description) end

现在我还想传递一个会话持有user_id,以及对权限组的引用.所以希望像下面的伪代码:

@app = App.create(app_params, session[:user_id], app_permission_id)

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

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

任何关于最佳/最干净方法的建议都将非常感激.我想我更喜欢以某种方式覆盖.create方法(但仅限于控制器端最干净的实现).

如何在Rails的.create方法中传递其他变量?

如果您是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