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
.
精彩评论