создание кнопки для обновления записи базы данных в ruby - PullRequest
0 голосов
/ 25 февраля 2019

Я создал базу идей с полем для голосования.Я хочу, чтобы пользователи могли нажимать кнопку, чтобы увеличить количество голосов за идею, а затем обновить экран.Я создал метод с именем increment_vote, но, похоже, не могу найти способ сохранить новое значение голосования в моей базе данных.Это моя часть моего кода index.html.erb:

<% @ideas.each do |idea| %>
  <tr>
    <td><%= idea.content %></td>
    <td><%= increment_vote(idea) %></td>
    <td><%= link_to 'Vote', ideas_path(:mode => "Vote"), :class => "button", :method => :get %></td>                                      
  </tr>

Если я вызываю метод приращенного голосования по ссылке на код голосования, я получаю ошибку "undefined method `to_model' for true:TrueClass. Did you mean to_yaml".

Это мой код метода в ideas.controller:

helper_method :increment_vote
  def increment_vote(idea)
    idea.votes +=1
    idea.save
   end

В настоящее время это вызывает ошибку, но увеличивает голосование первой идеи в таблице.

Можеткто-нибудь, пожалуйста, помогите?

1 Ответ

0 голосов
/ 25 февраля 2019

Вы не можете вызвать increment_vote метод из вида, вам нужно создать для него действие контроллера и вызывать его, когда пользователь нажимает на ссылку

# views/ideas/index.html.erb
<% @ideas.each do |idea| %>
  <tr>
    <td><%= idea.content %></td>
    <td><%= link_to 'Vote', upvote_idea_path(idea), class: "button", method: :post %></td>                                      
  </tr>
<% end %>

# routes.rb
resources :ideas do
  post :upvote, on: :member
end

# ideas_controller.rb
def upvote
  Idea.find(params[:id]).upvote
  redirect_to :index
end

# models/idea.rb
def upvote
  update(votes: votes + 1)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...