【问题标题】:In rails 4, how can I manipulate strong parameters before creation?在 Rails 4 中,如何在创建之前操作强参数?
【发布时间】:2013-11-21 16:58:32
【问题描述】:

我正在尝试将从表单多选字段输入的数组转换为用逗号分隔元素的字符串。我正在使用的 gem 需要一个以逗号分隔的字符串形式的 tag_field,但我的多个选择字段会创建一个数组。强参数拒绝数组,所以我需要将数组转换为字符串。这是我现在在我的应用程序控制器中的代码,但它不起作用。

def configure_devise_params
    devise_parameter_sanitizer.for(:sign_up) do |u|
        u[:tag_list].join(', ')
        u.permit(:email, :password, :password_confirmation,
        :profile_name, :how_did_you_hear, :first_name, :last_name, :type, :tag_list)
    end
end 

在我添加 :tag_list 之前,我有以下有效的代码:

def configure_devise_params
    devise_parameter_sanitizer.for(:sign_up) do |u|
        u.permit(:email, :password, :password_confirmation,
        :profile_name, :how_did_you_hear, :first_name, :last_name, :type)
    end
end 

我该如何解决这个问题?谢谢。

【问题讨论】:

    标签: ruby-on-rails model-view-controller devise acts-as-taggable-on strong-parameters


    【解决方案1】:

    有一个简单的方法来允许数组。

    示例: params.require(:article).permit(:title, {:rubric_ids => []})

    在你的情况下,它会是这样的:

    def configure_devise_params
      devise_parameter_sanitizer.for(:sign_up) do |u|
        u.permit(:email, :password, :password_confirmation,
        :profile_name, :how_did_you_hear, :first_name, :last_name, :type, {:tag_list => []})
      end
    end
    

    【讨论】:

    • 谢谢,不过我不想让它允许一个数组。 gem 需要一个带有逗号分隔元素的字符串,所以我正在尝试将数组转换为字符串。
    • 你能指定gem名称吗?可以在permit操作后尝试加入params。
    • 我正在使用acts-as-taggable-on gem。什么是连接参数?
    • 某处你喜欢 User.create(configure_devise_params)。我对吗?如果是这样,有一个脏代码可以做你想做的事 def configure_devise_params result = devise_parameter_sanitizer.for(:sign_up) do |u| u.permit(:email, :password, :password_confirmation, :profile_name, :how_did_you_hear, :first_name, :last_name, :type, {:tag_list => []}) 最终结果[:tag_list] = tag_list[:tag_list]。 join(', ') 结果结束
    • 对不起,我不知道该怎么做。您可以猴子修补 gem 以传递数组,而不是字符串。
    猜你喜欢
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    相关资源
    最近更新 更多