2014-01-31 5 views
0

Я создаю систему, в которой люди могут голосовать или отвечать на какой-либо вопрос, сохраненный в базе данных. В основном вопросы могут иметь два или несколько ответов (и ответы могут быть выбор флажками или радио-кнопок, в зависимости от типа вопросов)Вопросы Система голосования с [Rails 4]

Мои модели подобны следующим образом:

Вопросы модели

class Question < ActiveRecord::Base 
    has_many :answers, dependent: :destroy 
    accepts_nested_attributes_for :answers, :reject_if => lambda { |a| a[:answer].blank? } 
end 

ответы модель

class Answer < ActiveRecord::Base 
    belongs_to :question 
    has_many :votes 
end 

Пользователи модели

class User < ActiveRecord::Base 
    has_many :votes 
end 

Голосов модели

class Vote < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :answer 
end 

Это более или менее форму я хочу сделать, это показывает, вопрос первый, то ответы с возможностью выбрать, галочки или радио кнопки, а затем кнопку представить, чтобы сохранить голосование http://i.stack.imgur.com/x3zdr.png или смотрите ниже enter image description here

Любые предложения, как построить форму будет очень благодарна !!!

Маршруты:

$ rake routes 
      votes GET /votes(.:format)         votes#index 
        POST /votes(.:format)         votes#create 
     new_vote GET /votes/new(.:format)        votes#new 
     edit_vote GET /votes/:id/edit(.:format)       votes#edit 
      vote GET /votes/:id(.:format)        votes#show 
        PATCH /votes/:id(.:format)        votes#update 
        PUT /votes/:id(.:format)        votes#update 
        DELETE /votes/:id(.:format)        votes#destroy 
+0

Куда входит «голосование»? Являются ли ответы «голосами» в основном? –

+0

голосов - это ответы, а также тот, кто голосует. – Moh

ответ

1

Я бы сделать это так:

#config/routes.rb 
resources :questions do 
    resources :votes, only: [:new, :create], as: "vote", path: "vote" #-> /questions/1/vote 
end 

#app/controllers/votes.rb 
def new 
    @question = Question.find(params[:question_id]) 
    @vote = Vote.new 
end 

def create 
    @vote = Vote.new(vote_params) 
    @vote.save 
end 

private 

def vote_params 
    params.require(:vote).permit(:answer_id).merge(user_id: current_user.id) 
end 

#app/views/votes/new.html.erb 
<%= form_for @vote do |f| %> 
    <%= @question.title %> 

    Answers: 
    <% @question.answer.each do |answer| %> 
     <%= f.radio_button :answer_id, answer.id %> #-> need to check syntax 
    <% end %> 
    <%= f.submit "Go" %> 

<% end %> 

Это представит голосование с соответствующими answer_id и user_id. Хотя я считаю, что он тоже должен был question_id

+0

Привет, Rich, спасибо за подсказку, если он состоит из флажков, чтобы выбрать много ответов, должен ли я передать набор answer_ids контроллеру, а затем сохранить много голосов или сделать это в разных таблицах? Кстати, когда я пытаюсь войти на страницу голосования с помощью <% = button_to 'Vote', new_vote_path (question_id: question)%> b, он говорит, что никаких маршрутов не соответствует [POST] "/ votes/new" .. не должно быть ПОЛУЧИТЬ? – Moh

+0

Привет, спасибо, комментарий! Вы должны помнить, что у меня было очень мало работы для этого :) –

+0

То, как я это видел, было то, что вы создаете голосование из серии ответов. Вы задали потенциальные ответы на вопрос в бэкэнд приложения где-то, что означает, что когда вы идете на эту страницу, вы действительно просто делаете новый голос (учитывая, что ответы и вопросы уже созданы) –

Смежные вопросы