开发者

custom action for a nested resource without adding to routes

开发者 https://www.devze.com 2023-01-24 21:18 出处:网络
This is probably really simple but I have a nested resource lets say: map. resources :book, :has_many => :pages

This is probably really simple but I have a nested resource lets say:

map. resources :book, :has_many => :pages

I write an action c开发者_C百科alled "turn" that increases page.count by 1. How do I call this action using a link_to? Thanks a lot in advance.


It's hard to tell where your page.count comes in. In Railish, you would find pages.count (note the 's'). Further, count (and also size) is a read-only attribute on arrays and hashes et.al. provided by ruby that returns the number of elements. You don't set count.

Next, I'm not sure where your turn action is supposed to live, on the Book or the Page? And what is supposed to happen after it does what it does? Finally, a route is what makes an action an action -- without it, it's just a function.

For a moment, we'll assume you are trying to store the number of times a Page in a Book has been visited. It would be a better idea to have an instance variable called reads or times_viewed etc. in your Page model. Assuming your Book model is using restful routing, in Book's show action, you create an instance variable of the Page model being viewed and increment its reads attribute before rendering the view.

If you are trying to make a link sort of how 'Like' works in Facebook, meaning you want to update a record in a table without sending the user to a different page, you'll need to use link_to_remote* and some javascript. In that case, I'd just refer you to the Railscasts on that subject.

*I think as of Rails 3, link_to_remote became just link_to with :remote => true.

0

精彩评论

暂无评论...
验证码 换一张
取 消