【问题标题】:Unpermitted parameters for date_select rails not showing in databasedate_select rails 的未经允许的参数未显示在数据库中
【发布时间】:2014-11-12 16:56:40
【问题描述】:

尝试将带有年份、月份和日期的 date_select 发布到数据库,但无法做到。我收到以下未经许可的参数。

这是 binding.pry 结果

    17: def create
 => 18:   binding.pry
    19:   @timeslot = Timeslot.new(timeslot_params)
    20: 
    21:   if @timeslot.save
    22:     flash[:notice] = "Your timeslot was created."
    23:     redirect_to timeslots_path(@timeslot)
    24:   else
    25:     render :new
    26:   end
    27: end

    [1] pry(#<TimeslotsController>)> params
    => {"utf8"=>"✓",
     "authenticity_token"=>"9QH4nSgC9ov2Rj+cm/hruebc94OI63eUWJZoqWL9qzM=",
     "timeslot"=>{"name"=>"5.30pm", "starts_at(1i)"=>"2014", "starts_at(2i)"=>"11", "starts_at(3i)"=>"13"},
     "commit"=>"Create Timeslot",
     "action"=>"create",
     "controller"=>"timeslots"}
    [2] pry(#<TimeslotsController>)> params.require(:timeslot).permit(:name,  :"starts_at(1i).to_i", :"starts_at(2i).to_i", :"starts_at(3i).to_i")
    Unpermitted parameters: starts_at(1i), starts_at(2i), starts_at(3i)
    => {"name"=>"5.30pm"}
    [3] pry(#<TimeslotsController>)> params.require(:timeslot).permit(:name, starts_at: [])    
    Unpermitted parameters: starts_at(1i), starts_at(2i), starts_at(3i)
    => {"name"=>"5.30pm"}
    [4] pry(#<TimeslotsController>)> params.require(:timeslot).permit(:name, starts_at: [(1i), (2i), (3i)])    
    Unpermitted parameters: starts_at(1i), starts_at(2i), starts_at(3i)
    => {"name"=>"5.30pm"}
    [5] pry(#<TimeslotsController>)> 

这是控制器的强参数白名单

  def timeslot_params
    params.require(:timeslot).permit(:name,  :"starts_at(1i).to_i", :"starts_at(2i).to_i", :"starts_at(3i).to_i")
  end

这是表格

<div class='well'>
  <%= simple_form_for @timeslot do |f| %>
    <div class='control-group'>
      <%= f.label :name %>
      <%= f.text_field :name %>
    </div>
    <div class='control-group'>
      <%= f.label :starts_at %>
      <%= f.date_select :starts_at %>
    </div>   
    <%= f.submit(@timeslot.new_record? ? 'Create Timeslot' : 'Update Timeslot', class: 'btn btn-primary')%>
  <% end %>
</div>

我正在使用 Rails 4.1.6 / ruby​​ 2.1.3p242(2014-09-19 修订版 47630)[x86_64-darwin13.0]。

“starts_at”的数据库模式类型是日期时间格式。

任何帮助表示赞赏,在此先感谢。

【问题讨论】:

  • 为什么不只是params.require(:timeslot).permit(:name, :starts_at)
  • 你能添加你的模型吗?
  • @Зелёный 感谢您在我的回答下发表评论,我已经查看了问题并发现,这与我几天前偶然发现的情况不同,所以,我已经删除了答案。

标签: ruby-on-rails ruby


【解决方案1】:

如果您有 starts_at 作为模型属性,请添加:

params.require(:timeslot).permit(:name, :starts_at)

如果没有在你的模型中添加attr_accessible :starts_at 然后

params.require(:timeslot).permit(:name, :starts_at)

它会起作用的。

【讨论】:

  • 非常感谢先生。是的!您的解决方案有所帮助。 =) 我想我记得我是如何错过的,在此之前,我使用的是“:starts_at”,但是它的数据库模式类型是字符串格式。当我将其更改为日期时间格式时,我通过为 ":starts_at" 添加 3 个参数来进行疏忽。
猜你喜欢
  • 1970-01-01
  • 2018-04-01
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
相关资源
最近更新 更多