Wenn ein Benutzer beispielsweise auf "Take a Picture" klickt, wie können wir das create.html.erb-Formular mit Attributen auffüllen, die speziell für diese hervorgehobene Aufgabe festgelegt wurden, wie für 12
Tage und unter Tue, Thu
?Wie reformieren Sie die Voreinstellung für vorgestellte Objekte?
Ich verwende die 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 %>
#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 %>
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
Da es jetzt ChallengeForm
keinen Einfluss auf create.html.erb hatte. Wie können wir die Standardeinstellungen in create.html.erb je nach den vorgestellten :action
richtig einfügen?
@ AnthonyGalli.com Wenn Sie "die Controller-Logik" sagen, was meinen Sie damit? Es wäre hilfreich, wenn Sie Einzelheiten dazu angeben könnten, was Sie versucht haben und wo genau es nicht wie erwartet funktioniert. Vielleicht folgen Sie dem Code mit einem 'binding.pry'? Nur ein Vorschlag. –
Danke für Ihre Hilfe! Ich habe dir die Belohnung gegeben, weil du so geduldig warst. Ich konnte die Arbeit nicht reformieren, also musste ich eine Mischung aus Javascript und Ruby verwenden, um mich in die richtige Richtung zu bringen. Ihre Antwort war jedoch hilfreich, um mich in die richtige Richtung zu bringen, und ich werde vielleicht in der Zukunft darauf zurückkommen, wenn ich weitere Herausforderungen hinzufüge. –