如何使用改革预填充特色对象?

当用户点击,例如“拍照”时,我们如何预先填充create.html.erb表格,其中包含专门针对该特色挑战设置的属性,例如12天,以及Tue, Thu吗?

我正在使用reformgem 。

 #challenges_controller def new @challenge = Challenge.new respond_modal_with @challenge, location: root_path end #challenges/new.html.erb  
Or choose a featured challenge:

在此处输入图像描述

 #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   Challenge:  Do For:  Do On:   

在此处输入图像描述

 class ChallengeForm  30, 'Take a Picture' => 12 } end def action_to_commited_hash { 'Run a Mile' => ['Mon', 'Wed', 'Fri'], 'Take a Picture' => ['Tue', 'Thu'] } end end 

现在, ChallengeForm对create.html.erb没有任何影响。 我们怎样才能将默认值正确地插入到create.html.erb中,具体取决于feature :action

试试这个:

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 

挑战/ 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' %>
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 %>

挑战/ 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 %> 

我可能有点偏,但你明白了吗?

您正在将@challenge传递给表单,但您可能希望传递表单对象。

为此,在控制器中添加一些代码:

 @challenge_form = ChallengeForm.new(@challenge) 

然后在视图中:

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