gpt4 book ai didi

ruby-on-rails - 如何为特色对象预填充表单?

转载 作者:数据小太阳 更新时间:2023-10-29 07:00:34 24 4
gpt4 key购买 nike

用户可以输入自定义 :action 或选择特色 :action:

<%= f.text_field :action %>
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 %>

如果用户选择特色 :action,新的挑战/_form 会预先填充他选择的 :action,但现在我想把它带到在您的帮助下更上一层楼!

<%= form_for(@challenge)  do |f| %>
Challenge: <%= f.text_field :action %>
Do On: <%= f.collection_check_boxes :committed %>
Do For: <%= f.number_field :days_challenged %>
<% end %>

如何预填充特色挑战的其他属性,例如“Do For”或“Do On”?

例如,如果用户选择特色:action: 'Run a Mile 那么我会用Run a Mile预填充表单>,周一、周三、周五30 天

最佳答案

您可以将 simple_formreform 一起使用。 Reform 将为您提供表单对象,您可以在其中覆盖填充表单的方法。

这是一个简化的示例(您必须根据自己的情况进行调整):

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' => ['Tu', 'Thu']
}
end
end
上述方法中的

super 将委托(delegate)给 model。请注意,您正在覆盖 getter 方法,它不会影响 setter(如果您想在写入表单数据之前更改表单数据,您也可以覆盖 setter)。

在你的模板中,而不是

form_for @challenge

你将拥有:

simple_form_for @form

这是一个 super 通用的 Rails 表单库,我无法想象自己不使用它!

关于ruby-on-rails - 如何为特色对象预填充表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36409502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com