如何在Rails4中访问params?

时间:2014-03-27 13:38:43

标签: ruby-on-rails ruby-on-rails-4

我正在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

我通常在控制器中手动设置我的外键关系,就像这样......

的应用程序/控制器/ tickets_controller.rb

 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上做了一次put / inspect ......

{"session_type"=>"Severe", "student_id"=>"09098", "student"=>"John Q. Student", "course_id"=>"English 111", "notes"=>""}

......并且那里没有教师和导师ID。想法?

修改

在我的控制器中默认创建了ticket_params方法。这是......

 def ticket_params
      params.require(:ticket).permit(:tutor_id, :session_type, :student_id, :student, :instructor_id, :course_id, :notes)
 end

1 个答案:

答案 0 :(得分:1)

您需要在控制器中定义一个名为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]