rails 4使用没有控制器的强参数

时间:2014-01-31 19:02:10

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

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中我没有控制器。

3 个答案:

答案 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))

https://github.com/rails/strong_parameters

答案 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

确保您是否拥有嵌套属性,然后在强参数方法中指定它们。