On 25 Sep 2008, at 17:48, Mark Wilden wrote:

"Each controller action only calls one model method other than an
initial find or new.".

I didn't get that article (or, rather, that particular subarticle) at all.

I kinda tuned out when I read, "Polymorphic associations, however, are encouraged!"

I wouldn't let that guy near a CSV file of my shopping list after reading that...


It sounded to me like some of the virulent REST advocates who want to shoe-horn every action into an HTTP verb. The controller should do what the controller needs to do. If that means displaying just available products instead of all products, it should do that "with intention," not just as the default find action.

Is a better rule "each controller action should contain no more than two branches"? (But then, I try to apply that to all methods, and even then, I try to push conditional code as far down as possible.)


That said, scopes can and should be defined, but that's a well- understood idiom of Rails programming and can lead to abuse.

Would this mean that I should change my custom find naming convention to
something more general that would never have to be renamed over time
such as find_for_index, find_for_create, etc?

That puts too much controller knowledge in the model, in my opinion.

I'd try identify the problem that is being solved in the controller. *Why* does ProductController#index need that certain subset of the data? Maybe the model method should be something like:

* Product.top_selling
* Product.not_selling
* Product.needs_updating

Does this better express the intent?

What matters is that the desired behavior, possibly including and/or implemented by calling find_for_index, is achieved. If such a naming convention was very important to the project, then a spec like that would be appropriate. However, I'd regard it as a code smell if I saw such a test.

I agree (I think). Conventions decrease the mental effort to make something work at the risk of reduced insight. Certainly if you are automatically checking that the code is following conventions, that suggests the convention is artificial and unnatural. You could end up trying to map all the business problems onto a very crude technical interface.

Ashley


--
http://www.patchspace.co.uk/
http://aviewfromafar.net/



_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to