On 29 June 2015 at 21:27, Federicko <[email protected]> wrote:
>> Hi All,
>
>
> I have moved everything over to the model as suggested. Check it out :p
>
> In the model, I created a Class method as well as the previous instance
> methods:
>
> class Article < ActiveRecord::Base
>
> def self.rank(id, rank)
>   @this_article = find(id)
>
>   if (rank == "up")
>     @next_article = find_by(rank: @this_article.rank.to_i-1)
>
>     @this_article.rankup
>     @next_article.rankdown
>   else
>     @next_article = find_by(rank: @this_article.rank.to_i+1)
>
>     @this_article.rankdown
>     @next_article.rankup
>   end
> end
>
> def rankup
>   self.rank = self.rank - 1
>   self.save
> end
>
> def rankdown
>   self.rank = self.rank + 1
>   self.save
> end
>
> end
>
>  And now in my controller, I only have one action:
>
> def rank
>   Article.rank(params[:id], params[:rank])
>   redirect_to articles_path
> end

Rather than having a class method rank() I think it would be better to
have a member method then in the controller do something like
this_article = Article.find(params[:id])
this_article.rank( params[:rank] )

Also don't forget to allow for the fact that there might not be an
article with the given id, so perhaps
this_article.rank (params[:rank]) if this_article

Colin

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/CAL%3D0gLssAGSx0Mq_S%2BPFeBOHZRJsNVBtsQweBcHcfB%2B0k6vxGQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to