rails:param.require(:model)ActionController :: ParameterMissing OR Empty

时间:2016-09-10 23:30:36

标签: ruby-on-rails-4

我的目标是使用硬编码值创建新的提醒记录:

在以下结构中:

提醒belongs_to :deck
甲板has_one :reminder, dependent: :destroy

在甲板控制器中,我进入这样的视图:

def repitition_alerts
    @deck = Deck.find(params[:id])
    @reminder = Reminder.new
end

在该页面上,我想创建一个带有link_to的新提醒:

<%= link_to "make alerts", deck_reminders_path(@deck, @reminder,  {:action => :create}, next_alert: 'soon', interval: false), :method => :post %>

我在浏览器中收到以下错误: ActionController::ParameterMissing in RemindersController#create

从终端输出:

ActionController::ParameterMissing (param is missing or the value is empty: reminder):
  app/controllers/reminders_controller.rb:34:in `reminder_params'
  app/controllers/reminders_controller.rb:19:in `create'

在reminders_controller.rb中我有:

def reminder_params
    params.require(:reminder).permit(:deck_id, :interval, :next_alert, :alerts)
end

如果我理解正确的话。 Rails没有看到@reminder传入它吗?但它在页面中。我可以将其放在同一页<%= @reminder %>上,然后在页面上显示#<Reminder:0x007fc012fa00a8>。所以对象本身就存在了。

(Rails 4.2)enter image description here

1 个答案:

答案 0 :(得分:1)

您需要reminder嵌套在:reminder下的参数。将您的link_to切换为此:

<%= link_to "make alerts", deck_reminders_path(
      @deck, 
      @reminder,  
      {:action => :create}, 
      reminder: {
        next_alert: 'soon', 
        interval: false
      }
    ), :method => :post %>