Ruby on Rails Friday, July 3, 2015

Hi Colin,

I have done that but slightly differently as the 'this' variable was giving me an error.

Controller didn't change. It still just calls the rankup or rankdown methods in the model. 
Here's the code for that:

def rank
  @this_article = Article.find(params[:id])

  if (params[:rank] == 'up')
    @this_article.rankup
  else
    @this_article.rankdown
  end

  redirect_to articles_path()
end

Then in my model I have 3 methods:

def rankup

  @affected_article = Article.find_by(ranking: ranking.to_i-1)

  swap_rank(@affected_article)

end

def rankdown

  @affected_article = Article.find_by(ranking: ranking.to_i+1)

  swap_rank(@affected_article)
end

private

def swap_rank(affected_article)

  @current_ranking = self.ranking

  self.ranking = affected_article.ranking
  affected_article.ranking = @current_ranking

  Article.transaction do
    self.save
    affected_article.save
  end
end

This way all the code sits in one method and there is no repeated code

--
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 rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/6d9da33f-8401-4e4a-8a35-ea769c7efd66%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment