Rails 4: 我来自rails 3.2.x我有一个问题。如何在没有控制器的情况下使用Strong参数。
我有这个型号:
Track (the only one that has a Controller )
has_many :tracksegments, :dependent => :destroy
has_many :points, :through => :tracksegments
Tracksegment
belongs_to :track
has_many :points, :dependent => :destroy
points
belongs_to :tracksegment
Track是唯一一个拥有Controller的轨道,因此它具有一些强参数。
我想知道在哪里可以放置属于“tracksegment”和“points”的参数 在Rails 3.x中,它直接在模型中,但在rails 4中我没有控制器。
答案 0 :(得分:8)
如果您需要在控制器之外使用“强参数”,这可能会有所帮助:
在控制器之外使用
虽然强参数将在应用程序控制器中强制执行允许值和必需值,但请记住,在控制器外部使用时,您需要清理用于批量分配的不可信数据。
例如,如果从第三方API调用中检索JSON数据并将未经检查的解析结果传递给Model.create,则可能会发生不需要的批量分配。您可以通过切片哈希数据,或将数据包装在ActionController :: Parameters的新实例中并将声明权限与控制器中的权限相同来缓解此风险。例如:
raw_parameters = { :email => "john@example.com", :name => "John", :admin => true }
parameters = ActionController::Parameters.new(raw_parameters)
user = User.create(parameters.permit(:name, :email))
答案 1 :(得分:3)
您允许参数进入您发送的控制器。听起来你正在通过你的轨道控制器发送它们,如果是这样的话你会把它们添加到那里。
请参阅此问题,了解如何允许嵌套参数Rails 4 - Strong Parameters - Nested Objects
答案 2 :(得分:2)
您需要在控制器中添加强参数。现在在Rails 4中,如果你没有任何控制器,你就没有添加attr_accessible
。
所以,你跟踪控制器会有点像
def create
@track = Track.create(track_params)
end
private
def track_params
params.require(:track).permit(:param1, :param2, :param2)
end
确保您是否拥有嵌套属性,然后在强参数方法中指定它们。