Ask is a Rails engine that provides tools to simplify the process of letting your app's users build forms for things like questionnaires or surveys.
- Rails 3.1 or higher
- jQuery
- jQuery UI
- Uses Carrierwave for uploads
More information will be on the wiki.
Add to your Gemfile:
gem 'ask'
In your terminal run:
bundle
rake ask_engine:install:migrations
rake db:migrate
Ask needs to be tied to two models in your application: an "asker" and an "answerer". The asker model should be the model that has questions, such as a Survey or Event. The answerer model should be the model that has answers to the questions such as a SurveySubmission or an EventRegistration.
In your asker model add:
acts_as_asker
In your answerer model add:
acts_as_answerer
In your asker form views, inside an already defined form_for
helper add:
<%= render(:partial => 'asker/form', :locals => { :f => f }) %>
In your answerer form views, inside an already defined form_for
helper add:
<%= render(:partial => 'answerer/form', :locals => { :f => f }) %>
In your javascript manifest file add:
//= require ask
In your stylesheet manifest file add:
/*
*= require ask
*/
If you want your form to start with one question, you can do the following...
In your asker controller's new
and edit
methods you'll need to build the first question and choice. The best way to do this is create a private method:
def build_questions
@event.questions.build
@event.questions.each{|q| q.choices.build}
end
Then at the top of your asker controller, include:
before_filter :build_questions, :only => [:new, :edit]
# or you can call the build_questions method inside the new or edit controller
In your answerer controller's new
and edit
methods you'll need to call build_or_create_answers
and pass it in the appropriate questions. Such as:
@event_registration.build_or_create_answers @event_registration.event.questions
Finally you'll need to define an asker
method on your answerer model, like so:
class EventRegistration < ActiveRecord::Base
def asker
return event
end
end
If you want to changed the default whitelisted file types for upload questions, just drop this into an initializer file.
Ask.configure do |config|
@upload_whitelist = %w(jpg jpeg gif png doc docx txt pdf xls xlsx zip)
end
MIT License