Jeez.... For a first time effort, you have done an excellent job... Seems 
that you have great instincts..

I don't see your form here, but defs rankup an rankdown should be 
consolidated into a controller action 'update'.  What's the name of your 
view?  Seems here it should be called list.

If I were you, I would start from scratch... Seems to me that you didn't 
use Rails generators in your process.

Start by creating a new rails app

Once that loads properly, go to your GemFile and add: 
gem "nifty-generators", :group => :development  ## 
https://github.com/ryanb/nifty-generators
run bundle install
Hopefully that worked....

{For some reason I can't expand my text here, ending abruptly}


















  







On Sunday, June 28, 2015 at 2:51:57 PM UTC-4, Federicko wrote:
>
> Hi All,
>
> I am learning rails at the moment and have gone through one of the 
> tutorials on the rails website for creating a simple blog system.
> I have added some new features to it and it is working great.
> However, I would like to show someone my code and see if it is the right 
> or most efficient way of achieve this.
>
> This system is based on the blog system from the Getting Started with 
> Rails guide which can be found on 
> http://guides.rubyonrails.org/getting_started.html
>
> I simply added a rank up/rank down function to the blog system:
>
> First, in my routes.rb I added:
>
> resources :articles do
>     resources :comments
>     member do 
>       get 'rankup'
>       get 'rankdown'
>     end
>   end
>
> Then, in my controller I added two new actions:
>
> def rankup
>   @this_article = Article.find(params[:id])
>   @new_rank = @this_article.rank.to_i-1
>   @prev_article = Article.find_by(rank: @new_rank)
>
>   @prev_article.rank = @this_article.rank
>   @this_article.rank = @new_rank
>
>   @this_article.save
>   @prev_article.save
>   redirect_to articles_path
> end
>
> def rankdown
>   @this_article = Article.find(params[:id])
>     @new_rank = @this_article.rank.to_i+1
>   @next_article = Article.find_by(rank: @new_rank)
>
>   @next_article.rank = @this_article.rank
>   @this_article.rank = @new_rank
>
>     @this_article.save
>   @next_article.save
>   redirect_to articles_path
> end
>
> I also updated the destroy action to include a re ranking function:
>
> def destroy
>   @article = Article.find(params[:id])
>   @start_rank = @article.rank
>   @next_articles = Article.where(["rank > ?", @start_rank]).order('rank 
> ASC')
>
>     @next_articles.each do |article| 
>     article.rank = @start_rank
>     article.save
>
>     @start_rank = @start_rank + 1
>     end
>
>   @article.destroy
>   redirect_to articles_path
> end
>
> And in the view I simply added the links to the list:
>
> <% @articles.each.with_index do |article, index| %>
>     <tr>
>       <td><%= article.title %></td>
>       <td><%= article.text %></td>
>       <td><%= article.rank %></td>
>       <td><%= link_to 'View', article_path(article) %></td>
>       <td><%= link_to 'Edit', edit_article_path(article) %></td>
>       <td><%= link_to 'Delete', article_path(article), method: :delete, 
> data: {confirm: 'Are you sure?'} %></td>
>       <td>
>         <% if index != 0 %>
>           <%= link_to 'Up', rankup_article_path(article) %>
>         <% end %>
>       </td>
>       <td>
>         <% if index != @articles.count-1 %>
>           <%= link_to 'Down', rankdown_article_path(article) %>
>         <% end %>
>       </td>
>     </tr>
>   <% end %>
>
> As mentioned, I am new to RoR so I don't know if I'm doing this correctly 
> according the Rails convention but the code is working great so I'm happy 
> about that.
>
> If someone can review my code please and tell me what I can improve on, 
> that would be great.
>
> I'm also thinking there might be an existing gem or something that I can 
> install that will do the ranking for me automatically.
>
> Anyway, look forward to your feedbacks.
>
>
> Thanks in advance.
>

-- 
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/348bdaf3-8f9d-411a-a18d-b60b4b341320%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to