params哈希问题与隐藏的表单发布请求

时间:2016-07-05 14:08:51

标签: ruby-on-rails

我有这个隐藏的形式:

<form action="/event_signup" method="post">
    <input type="hidden" name="user_id" value="<%= session[:current_user]%>">
    <input type="hidden" name="event_id" value="<%= event.id%>">
    <input type="hidden" name="authenticity_token" value="<%= form_authenticity_token%>">
    <input type="submit" value="Sign up">
</form>

这是我的event_attendances控制器:

class EventAttendancesController < ApplicationController
    def create
        @event_attendance = EventAttendance.new(attendance_params)
        if @event_attendance.save
            flash[:success] = "Signed up for event successfully"
        else
            flash[:danger] = "An error occured whilst trying to sign you up for an event"
        end
        redirect_to root_url
    end

    private
        def attendance_params
            params.require(:event_attendance).permit(:event_id, :user_id)
        end
end

我的路线设置如下:

post 'event_signup' => 'event_attendances#create'

但是当我点击提交表单按钮时出现错误:

ActionController::ParameterMissing in EventAttendancesController#create 

当我尝试在控制台中看到我的params哈希时,我收到一个名称错误:

NameError: undefined local variable or method `params'

但是我可以在错误页面上看到我的params hash看起来应该是这样的:

Request

Parameters:

{"user_id"=>"1",
"event_id"=>"1",
"authenticity_token"=>"FskE5u1cxfN4JklMfM/JqKtg3t45tyP1z6ivUVmyLx+zlY7aShQDn+eF6aoOXp/StH6svsawXVtSCZcfe4UcsQ=="}

这是我的活动出席模式:

class EventAttendance < ActiveRecord::Base
    belongs_to :user
    belongs_to :event
end

1 个答案:

答案 0 :(得分:0)

您遇到的问题是您的form定义。

看起来应该是这样的:

<%= form_for @event_attendance do |f| %> 
  <%= f.hidden_field_tag(:user_id, session[:current_user]) %>
  <%= f.hidden_field_tag(:event_id, event.id) %>
  <%= f.submit "Create" %>
<% end %>

我建议您创建一个新的rails项目,然后在该新项目中创建一个脚手架。在那里,您将看到rails如何构建表单以及它与模型和控制器的连接。

我还建议你在这里阅读Rails Form Helpers: http://guides.rubyonrails.org/form_helpers.html

另外看一下简单形式的宝石,以便更好地开发,帮助很多。