【问题标题】:rails 4 using strong parameters with no controllerrails 4 使用无控制器的强参数
【发布时间】:2014-01-31 19:02:09
【问题描述】:

导轨 4: 我来自 rails 3.2.x 我有一个问题。如何在没有控制器的情况下使用强参数。

我有这个模型:

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 是唯一一个有控制器的,所以它有一些强参数。

我想知道我可以把属于“tracksegment”和“points”的参数放在哪里 在 Rails 3.x 中它直接在模型中,但在 Rails 4 中我没有控制器。

【问题讨论】:

  • 你需要确保tracksegment和points嵌套在track下。然后您可以在轨道控制器中访问它们的参数。有关嵌套参数白名单的示例,请参阅我的答案。

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


【解决方案1】:

如果您需要在控制器之外使用“强参数”,这可能会有所帮助:

在控制器之外使用

虽然强参数将在您的应用程序控制器中强制执行允许和要求的值,但请记住,在控制器外部使用时,您需要清理用于批量分配的不受信任的数据。

例如,如果您从第三方 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

【讨论】:

    【解决方案2】:

    您允许将参数发送到您通过的任何控制器。听起来您正在通过轨道控制器发送它们,如果是这样,您可以将它们添加到那里。

    查看这个问题,了解如何允许嵌套参数Rails 4 - Strong Parameters - Nested Objects

    【讨论】:

      【解决方案3】:

      您需要在控制器中添加强参数。现在在 Rails 4 中,如果你没有任何控制器,你就没有添加 attr_accessible

      因此,您的跟踪控制器将类似于

      def create 
      @track = Track.create(track_params)
      end
      
      private
      
      def track_params
      params.require(:track).permit(:param1, :param2, :param2)
      end
      

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

      【讨论】:

      • 如果没有控制器则不能处理参数。
      • 谢谢!这是一个嵌套属性
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      相关资源
      最近更新 更多