【问题标题】:Rails: In a controller, add a value to the params submitted by a formRails:在控制器中,为表单提交的参数添加一个值
【发布时间】:2013-12-27 00:58:23
【问题描述】:

在我的“用户”数据库中,我有“电子邮件”、“姓名”和“职位”。

Emailname 是通过表单提交的,但 position 在我为新用户编写行之前在我的控制器中确定。如何将position 添加到我的alpha_user_params

def create
  position = User.order("position DESC").first
  # How can I add position to alpha_user_params????

  @user = User.new(user_params)
  if @user.save
    # success stuff
  else 
    # error stuff
  end
end

private
  def alpha_user_params
    params.require(:alpha_user).permit(:email, :producer, :position)
  end

【问题讨论】:

  • 这是用户的属性吗?

标签: ruby-on-rails ruby ruby-on-rails-4 strong-parameters


【解决方案1】:

如果position是用户的属性,你可以这样做:

  @user = User.new(user_params)
  @user.position = position
  # @user.position = User.order("position DESC").first
  if @user.save
    # success stuff
  else 
    # error stuff
  end

这不需要您向alpha_user_params 方法添加任何内容。由于 position 属性是由您的控制器生成的,并且不会由用户添加/修改,因此我建议您将此属性保留在控制器中。

user_params 应该只允许那些将由用户输入/修改的属性。

【讨论】:

  • 很好,是否可以将其添加到 user_params 以保持简洁?
  • @Stoic 我尝试了您的解决方案,但它对我不起作用。是否可以将参数添加到user_params,然后通过保存user_params将所有参数一起保存?
【解决方案2】:

我也遇到过类似的问题,我在模型中使用了before_create

class User < ApplicationRecord

before_create :get_position

private

def get_position
  self.position = YourLibrary.position
end

这将在创建用户时添加位置。您也可以使用其他回调,例如before_save,查看the active record documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多