我有这个隐藏的形式:
<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
答案 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
另外看一下简单形式的宝石,以便更好地开发,帮助很多。