Чтобы научить себя Rails, я создаю чрезвычайно простое приложение для голосования.
Есть 2 модели, Вопрос и Опция. Вопрос имеет множество параметров и вариант принадлежит Вопросу.
Используя стандартные строительные леса, я достиг стадии, когда вы можете добавить вопрос, просмотреть его, а также добавить к нему параметры и просмотреть эти параметры.
Теперь я хотел бы добавить код, который увеличивает значение option.count на единицу при нажатии на ссылку. У меня есть метод voice_up в модели Option:
class Option < ActiveRecord::Base
validates :text, :presence => :true
belongs_to :question
def vote_up
self.count += 1
end
end
Контроллер My Options выглядит так:
class OptionsController < ApplicationController
def create
@question = Question.find(params[:question_id])
@option = @question.options.create(params[:option])
redirect_to question_path(@question)
end
end
Модель моего вопроса выглядит так:
class Question < ActiveRecord::Base
validates :text, :presence => {:message => 'A question normally has text...'}
has_many :options, :dependent => :destroy
def vote
# Maybe the vote code will go here???
end
end
А у моего контроллера вопросов есть обычные методы создания, создания, редактирования и уничтожения, которые создает скаффолд. V немного настройки здесь.
Мое представление show.html.erb, куда я хотел бы поместить ссылку на метод голосования, выглядит следующим образом:
<p id="notice"><%= notice %></p>
<p>
<b>Question <%= @question.guid %></b>:
<%= @question.text %>
</p>
<% if @question.options.count == 0 %>
<p>Shame! there are currently no options to vote on. Add some! </p>
<% elsif @question.options.count == 1 %>
<p>One option in a vote is a dictatorship... Maybe add some more?</p>
<% end %>
<h2>Options:</h2>
<% @question.options.each do |option| %>
<p>
<%= option.text %>: ** Link to vote here!
</p>
<% end %>
<h2>Add an option to vote on</h2>
<%= form_for([@question, @question.options.build]) do |f| %>
<div class="field">
<%= f.label :text %><br />
<%= f.text_field :text %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
<% if @question.options.count == 0 # Only show edit if no options saved. %>
<%= link_to 'Edit', edit_question_path(@question) %> |
<% end %>
<%= link_to 'Back', questions_path %>
Итак, я пытаюсь добавить ссылку «голосовать» рядом с каждой опцией, которая вызывает метод voice_up в модели опций. Это, наверное, смешно легко, но я врезался в стену и был бы очень признателен за любую помощь.
Кроме того, любые предложения о том, как сделать это лучше, будут приветствоваться!
Спасибо
Simon