如何在轨道上的红宝石上使用强参数?

时间:2014-03-05 17:17:45

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

我是rails 4上的ruby的新手,我试图在向项目添加“角色”之前使用强参数来要求存在“项目”。 “角色”本身需要与“项目”相关联。

我遇到的问题是,使用我当前的代码,我收到错误 "undefined method permit'for“1”:字符串“` - 我该如何解决这个问题?

错误在我的“角色”控制器中识别 - >

  private 
  def role_params
    params.require(:project_id).permit(:role)
  end

  def project
    @project ||= Project.find(params[:project_id])
  end`

我在控制器中的创建方法是

  def create
    @role = project.roles.create(role_params)
    new_was_successful = @role.save
  end

模型是:

class Role < ActiveRecord::Base
  belongs_to :project
  validates :project_id , :presence => true
end

我做错了什么?

1 个答案:

答案 0 :(得分:1)

更新

  def role_params
    params.require(:project_id).permit(:role)
  end

  def role_params
    params.require(:role).permit(:project_id) ## if more fields are present in role model then add them as arguments to permit  
  end

由于您未正确设置强参数,因此收到错误。在params哈希中,你会得到这样的东西:

示例:

"role"=>{"project_id"=>1,...} ### ... refers to other fields in role model, if present 

修改

更新您的create操作,如下所示

  def create
    @role = project.roles.create(role_params)
    if @role.save
      redirect_to @role, notice: 'Role was successfully created.'
    else
      render action: 'new'
    end 
  end