I want to pass the params collection from the controller to the model to parse filtering and sorting conditions. Does having a method in the model that takes the params from the controller break MVC?
Not necessarily. The params object is just a hash. There is no reason why you can't or shouldnt pass a configuration hash to a method. I do something similar quite often. One instance I find myself working with is XML API's that I must generate. Many options are available on the query string. To handle this I use a pattern similar to the example below:
#Controller @models = Model.collection_for_api(params[:model]) render :xml => @models
#Model def self.collection_for_api(opts = {}) # assemble a bunch of named scopes based on opts end
You're passing unnecessary knowledge to your model. It definitely doesn't need to know the controller and/or the action it's being called from. And this information is by default in the params hash of any given controller action. Thus, it's considered a bad practice - bad design. Your objects should assume as little as possible about any other structure on your application.
If you notice I only pass a section of the params has designed specifically to build the appropriate query, not the entire hash.