我有一个Exercise
模型,它有这些列(伪Ruby):
model Exercise do
string :name
calories_burned :float
end
我希望当用户添加练习时能够以这种方式进行练习:
问题是,我不知道如何把它放在我看来。以下是处理else案例的方法:
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
我现在有这样的事情:
<div class="field">
<% if @exercise_added %>
<div id="select_div">
<%= select_tag :name,options_for_select(@exercise_added) %>
<input type="checkbox" name="custom_type_checked" id="which_type">New type?</input>
</div>
<% end %>
<div id="regular_field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
</div>
在@exercise_added
中,我列出了数据库中所有练习的名称。什么是最好/最干净的处理方法?
答案 0 :(得分:4)
您可以检查数组@exercise_added是否为空,并相应地显示选择字段或文本字段。
<div class="field">
<% if !@exercise_added.empty? %>
<div id="select_div">
<%= select_tag :name,options_for_select(@exercise_added) %>
<input type="checkbox" name="custom_type_checked" id="which_type">New type?</input>
</div>
<% else %>
<div id="regular_field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<%end%>
</div>
答案 1 :(得分:0)
您应该仔细查看 this railscast (以及following part)。祝你好运!
答案 2 :(得分:0)
默认情况下,我会显示选择框和按钮,文本框隐藏,除非变量@show_textbox
为真。像这样:
<div class="field">
<div id="select_div">
<%= select_tag :name,options_for_select(@exercise_added) %>
<%= f.submit "New Exercise" %>
</div>
<div id="regular_field" <%= hidden_unless @show_textbox %> >
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
</div>
我写了一个辅助函数
def hidden_unless cond
raw "style=\"display: none;\"" unless cond
end
# this one is helpful, too
def hidden_if cond
raw "style=\"display: none;\"" if cond
end
然后,在我的控制器中,检查是否按下了“新练习”按钮。如果是这样,基本上将@show_textbox
设置为true,然后重新呈现new
表单。
def create
# .....
# did we get here because the user pressed "New Exercise"?
if params[:commit].eql?("New Exercise")
@show_textbox = true
# probably some other code to replicate what happens in your #new action
render :action => new
end
# ....
end
如果:name
字段中包含任何文字,您可以检入控制器,并使用该字段覆盖选择框。
这应该没有javascript工作。我添加了一些jQuery来替换带有链接或复选框的按钮,其中单击处理程序连接到显示文本框的函数,即$('#regular_field').toggle();
。
我没有处理隐藏选择框的问题。我实际上认为留下那个可能更好。无论如何,您可以使用类似的方法隐藏它。
答案 3 :(得分:0)
如果您使用两种表格怎么办?练习在@exercise_added时处理案例的一种形式,以及处理新练习创建的第二种形式。它甚至可以归结为POST和PUT之间的差异,具体取决于从下拉列表提交练习后您正在做什么。
我很想看到更多的代码以及控制器,因为看起来这个表单可能是嵌套的?