How to use reform for teaching for recognized subjects?

When the user clicks, for example, "Take a picture", how can we pre-fill the create.html.erb form with the attributes specially set for this recognized call, for example, for 12 days and make on Tue, Thu ?

I am using reform gem .

 #challenges_controller def new @challenge = Challenge.new respond_modal_with @challenge, location: root_path end #challenges/new.html.erb <%= simple_form_for(@challenge, html: { data: { modal: true } }) do |f| %> <%= f.text_field :action, placeholder: 'Enter a Custom Challenge' %><br> Or choose a featured challenge: <%= f.collection_radio_buttons :action, [['Run a Mile','Run a Mile'], ['Drink 16oz of Water','Drink 16oz of Water'], ['Take a Picture','Take a Picture'], ['1 Drink Max','1 Drink Max'], ['See Eiffel Tower','See Eiffel Tower'], ['Write a Book','Write a Book'], ['Skydive','Skydive'], ['Start a Business','Start a Business'], ['No Snooze','No Snooze'], ['Visit All 50 States','Visit All 50 States'], ['Talk to a Stranger','Talk to a Stranger'], ['Try a New Recipe','Try a New Recipe'], ['Media-fast','Media-fast']], :first, :last %> <%= f.submit %> <% end %> 

enter image description here

 #challenges_controller def create @challenge = Challenge.new(challenge_params) #create is being used to GET and then POST if params[:step] == '2' @challenge = current_user.challenges.build(challenge_params) @challenge.save redirect_to @challenge end end #challenges/create.html.erb <%= simple_form_for(@challenge) do |f| %> <%= hidden_field_tag :step, 2 %> Challenge: <%= f.text_field :action %> Do For: <%= f.number_field :days_challenged, value: 10 %> Do On: <%= f.collection_check_boxes :committed %> <% end %> 

enter image description here

 class ChallengeForm < Reform::Form property :action property :committed property :days_challenged model :challenge def commited super || action_to_commited_hash[model.action] end def days_challenged super || action_to_days_challenged_hash[model.action] end def action_to_days_challenged_hash { 'Run a Mile' => 30, 'Take a Picture' => 12 } end def action_to_commited_hash { 'Run a Mile' => ['Mon', 'Wed', 'Fri'], 'Take a Picture' => ['Tue', 'Thu'] } end end 

As of now, ChallengeForm does not affect create.html.erb. How can we get it to correctly insert default values ​​into create.html.erb depending on the recognized :action ?

+4
ruby ruby-on-rails forms rubygems reform
source share
2 answers

Try the following:

challenges_controller

  def new @form = ChallengeForm.new(Challenge.new) respond_modal_with @form, location: root_path end def create challenge = Challenge.new(challenge_params) @form = ChallengeForm.new(challenge) if params[:step] == '2' @form.validate(user_id: current_user.id) @form.save redirect_to challenge end end 

Problems /new.html.erb

 <%= simple_form_for @form, html: { data: { modal: true } }, url: 'your_challenge_create_path', method: :post do |f| %> <%= f.text_field :action, placeholder: 'Enter a Custom Challenge' %><br> Or choose a featured challenge: <%= f.collection_radio_buttons :action, [['Run a Mile','Run a Mile'], ['Drink 16oz of Water','Drink 16oz of Water'], ['Take a Picture','Take a Picture'], ['1 Drink Max','1 Drink Max'], ['See Eiffel Tower','See Eiffel Tower'], ['Write a Book','Write a Book'], ['Skydive','Skydive'], ['Start a Business','Start a Business'], ['No Snooze','No Snooze'], ['Visit All 50 States','Visit All 50 States'], ['Talk to a Stranger','Talk to a Stranger'], ['Try a New Recipe','Try a New Recipe'], ['Media-fast','Media-fast']], :first, :last %> <%= f.submit %> <% end %> 

Problems /create.html.erb

 <%= simple_form_for @form, html: { data: { modal: true } }, url: 'your_challenge_create_path', method: :post do |f| %> <%= hidden_field_tag :step, 2 %> Challenge: <%= f.text_field :action %> Do For: <%= f.number_field :days_challenged %> Do On: <%= f.collection_check_boxes :committed %> <% end %> 

I may be a little from you, but do you understand?

+2
source share

You pass the @challenge to the form, but you may need to pass the form object.

To do this, add the code to the controller:

 @challenge_form = ChallengeForm.new(@challenge) 

and then in the view:

 <%= simple_form_for(@challenge_form, html: { data: { modal: true } }) do |f| %> 
0
source share

All Articles