如何在Rails has_and_belongs_to_many模型中验证提交的ID?

时间:2013-10-26 14:25:12

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

在我的Rails应用中people可以有多个projects,反之亦然。

class Person < ActiveRecord::Base

  has_and_belongs_to_many :projects

  attr_accessible :name, :person_ids

end 

class Project < ActiveRecord::Base

  has_and_belongs_to_many :people

  attr_accessible :name, :person_ids

end 

在我的ProjectsController中,我需要一种方法来确保没有用户可以创建属于其他用户project的{​​{1}}。现在,我的选择框很容易被黑客攻击,例如,通过浏览器控制台。

在我看来,处理此问题的最佳方法是people。这是我提出的那个:

before_filter

但是,由于我还是Rails的新手,我正在努力使用class ProjectsController < ApplicationController before_filter :valid_people, :only => [ :create, :update ] def create @project = current_user.projects.build(params[:project]) if @project.save flash[:success] = "Project created." redirect_to edit_project_path(@project) else render :new end end private def valid_people # not working yet if params[:project][:person_ids].present? person = current_user.people.where(:id => params[:project][:person_ids]).first redirect_to(root_path) unless person end end end 方法的语法。如何检查valid_people是否属于用户?

感谢您的帮助。

1 个答案:

答案 0 :(得分:-1)

您的用例似乎需要一对多的关联。

class Person < ActiveRecord::Base
  has_many :projects
end

class Projects < ActiveRecord::Base
  belongs_to :person
end

即使不是这种情况,进行这种验证的方法是通过模型中的自定义验证器方法。控制器不是执行验证的地方。