[英]How do I access params in Rails4?
我正在用Rails 4编写我的第一个真实应用程序。这是我的模型...
class Instructor < ActiveRecord::Base
has_many :tickets
end
class Ticket < ActiveRecord::Base
belongs_to :instructor
belongs_to :tutor
end
class Tutor < ActiveRecord::Base
has_many :tickets
end
我通常像这样在控制器中手动设置外键关系...
def create
@ticket = Ticket.new(ticket_params)
@ticket.instructor = params[:instructor_id]
@ticket.tutor = params[:tutor_id]
...
我过去在Rails 3中使用过这个约定...但是在Rails 4中不起作用。我猜是因为参数很强。 我尝试使用类似...
@ticket.instructor = ticket_params[:instructor_id]
...但这是行不通的。 没有错误,什么也没有保存。 这是一些控制台输出...
Parameters: {"utf8"=>"✓", "authenticity_token"=>"afnbX2Ph2aaNj7CDnbcDI9EdA74xBBSV7oSoU4uYZ2Y=", "tutor_id"=>{"id"=>"2"}, "ticket"=>{"session_type"=>"Severe", "student"=>"John Q. Student", "student_id"=>"09098", "course_id"=>"English 111", "notes"=>""}, "instructor_id"=>{"id"=>"2"}, "commit"=>"Create Ticket"}
...如您所见,正在通过参数发送教师和教师ID。 但是我在ticket_params上进行了推入/检查...
{"session_type"=>"Severe", "student_id"=>"09098", "student"=>"John Q. Student", "course_id"=>"English 111", "notes"=>""}
...而教员ID和教员ID不存在。 想法?
在我的控制器中默认创建了ticket_params方法。 这里是...
def ticket_params
params.require(:ticket).permit(:tutor_id, :session_type, :student_id, :student, :instructor_id, :course_id, :notes)
end
您需要在控制器中定义一个名为ticket_params
的方法。 类似于以下内容
def ticket_params
params.require(:ticket).permit(:name, :date)
end
上面的方法基本上告诉控制器,它期望存在params[:ticket]
,并且传递给模型的密钥只会是:name
和:date
。 在github repo上阅读更多内容
更新:(在ticket_params方法添加到问题之后)
更改
@ticket.instructor = params[:instructor_id]
@ticket.tutor = params[:tutor_id]
至
@ticket.instructor_id = params[:instructor_id][:id]
@ticket.tutor_id = params[:tutor_id][:id]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.