Создать ссылку на определенный метод? - PullRequest
0 голосов
/ 29 апреля 2011

В качестве моего первого приложения на Rails я пытаюсь собрать простое приложение для блогов, где пользователи могут голосовать за сообщения.Я создал Blogpost каркас с целочисленным столбцом (озаглавленный «upvote») для отслеживания количества голосов.

В модели Blogpost я создал функцию:

def self.voteup
  blogpost.upvote += 1
end

В индексном представлении Blogpost я хотел бы создать ссылку, которая выглядит примерно так:

link_to "Vote up" self.voteup

Но, похоже, это не работает.Можно ли создать ссылку на метод?Если нет, можете ли вы указать мне правильное направление для достижения этой цели?

Ответы [ 3 ]

3 голосов
/ 29 апреля 2011

То, что вы пытаетесь сделать, идет вразрез с принципами проектирования MVC.Вы должны сделать голосование внутри действия контроллера.Вы, вероятно, должны создать действие контроллера под названием upvote.И передайте в нем идентификатор сообщения.Внутри действия контроллера вы можете получить пост с переданным ID и набрать его.

Если вам нужно серьезное голосование в приложении rails, вы можете взглянуть на эти камни

1 голос
/ 29 апреля 2011

Я предполагаю, что вам нужно увеличить столбец upvote в таблице блогов.Перенаправление на метод - это работа контроллеров, и мы можем давать ссылки только на методы контроллеров.Вы можете создать метод в контроллере Blogposts следующим образом:

def upvote_blog
  blogpost = Blogpost.find(params[:id])
  blogpost.upvote += 1
  blogpost.save
  redirect_to blogpost_path
end

На вашей странице индекса

<% @blogposts.each do |blogpost| %>
  ...
  <%= link_to "Vote up", :action => upvote_blog, :id => blogpost.id %>
  ...
<% end %>
1 голос
/ 29 апреля 2011

Вы не можете сопоставить метод Model с link_to в представлении.Вы можете создать действие в контроллере для доступа к методу Model и отобразить его, используя link_to, также, если действие отличается от CRUD, вы должны определить для него маршрут в route.rb

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...