在我的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
是否属于用户?
感谢您的帮助。
答案 0 :(得分:-1)
您的用例似乎需要一对多的关联。
class Person < ActiveRecord::Base
has_many :projects
end
class Projects < ActiveRecord::Base
belongs_to :person
end
即使不是这种情况,进行这种验证的方法是通过模型中的自定义验证器方法。控制器不是执行验证的地方。