Ant*_*com 7 ruby forms attributes ruby-on-rails object
用户可以输入自定义: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 %>
Run Code Online (Sandbox Code Playgroud)
如果用户选择了特色,: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 %>
Run Code Online (Sandbox Code Playgroud)
如何预先填充特色挑战的其他属性,例如"Do For"或"Do On"?
例如,如果用户选择了功能:action:'Run a Mile然后我会预填充表单Run a Mile,Mon, Wed, Fri,30 Days.
您可以simple_form与 一起使用reform。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
Run Code Online (Sandbox Code Playgroud)
super上面的方法中将委托给model. 请注意,您正在重写getter方法,并且它不会产生影响setters(如果您想在编写表单数据之前更改表单数据,您也可以重写设置器)。
在你的模板中,而不是
form_for @challenge
Run Code Online (Sandbox Code Playgroud)
你将会拥有:
simple_form_for @form
Run Code Online (Sandbox Code Playgroud)
这是一个超级通用的 Rails 表单库,我无法想象自己不使用它!
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |