【问题标题】:Rails 4: Forcing specific values with "strong parameters"Rails 4:使用“强参数”强制特定值
【发布时间】:2013-08-16 17:45:07
【问题描述】:

我正在为创建“项目”的表单而苦苦挣扎。最终,我只想允许当前的 user_id,但我还没有构建用户模型或身份验证,所以作为占位符,我只是硬编码1

app/views/projects/new.html.erb:

<%= form_for(:project, :url => {:action=>'create'}) do |f| %>
<%= f.text_field(:name) %>
<%= f.text_field(:instructions) %>
<%= f.hidden_field( :user_id, {:value=>1}) %>
<%= f.submit('Create Project') %>
<% end %>

app/controllers/projects_controller.rb

  def create
    #save object
    if Project.create( project_params )
        redirect_to(:action=>'show')
    else
        render('new')
    end
  end

  private
    def project_params
      params.require(:project).permit({:user_id => [1]}, :instructions, :max_duration, :active, :max_videos, :hashed_id)
    end

这是我尝试提交表单时遇到的错误:

Mysql2::Error: Field 'user_id' doesn't have a default value: INSERT INTO `projects` (`created_at`, `instructions`, `updated_at`) VALUES ('2013-08-16 17:38:56', 'sdfgsdf', '2013-08-16 17:38:56')

似乎 project_params() 方法正在剥离 user_id。我做错了什么?

【问题讨论】:

  • 只尝试{:user_id =&gt; 1}(只是一个整数,而不是数组)或最终去掉user_id部分并在允许后添加:.permit(:instructions, :etc).merge!({user_id: 1})
  • 是的,或者f.hidden_field(:user_id, 1)
  • @Edmund a hidden_​​field 仍然很容易更改。最好在服务器端用户输入后再设置。
  • @MrYoshiji 我应该允许整数(而不是数组)是有道理的,但它仍然会抛出缺少字段错误:{:user_id=&gt;1}{:user_id=&gt;'1'}
  • @Emerson 可能是因为 params[:user_id] 等于“1”,是一个字符串并且需要一个整数.. 试试.permit(user_id: ["1"]) 看看它是否有效

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


【解决方案1】:

可能是因为 params[:user_id] 是一个字符串,这样做应该可以。

params.require(:project).permit({:user_id => ["1"]}, :instructions, :max_duration, :active, :max_videos, :hashed_id)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-12-07
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多