为什么simple_form为布尔字段生成两次输入标记(一个隐藏,另一个不隐藏)?
在我的simple_form中,我有这个:
<%= form.input :over_phone, as: :boolean, input_html: {checked: true} %>
产生这个:
<div class="control-group boolean optional order_over_phone">
<label class="boolean optional control-label" for="order_over_phone">Order over phone</label>
<div class="controls">
<input name="order[over_phone]" type="hidden" value="0">
<label class="checkbox">
<input checked="checked" class="boolean optional" id="order_over_phone" name="order[over_phone]" type="checkbox" value="1">
</label>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
如您所见,一个输入标记被隐藏,值为0,另一个输入标记被取消隐藏,值为1.如果我提交表单,在post参数中我得到两个值:
order[over_phone]:0
order[over_phone]:1
Run Code Online (Sandbox Code Playgroud)
我在与此布尔字段关联的模型创建中有一些随机行为,所以我想知道它是否是由simple_form引起的.非布尔字段类型不会发生这种情况.
如果您遇到类似问题,请分享您的经验.
我正在使用simple_form 2.1.0.
在rails中,是否建议使用表单助手?在内部,一切都归结为普通的html然后为什么不直接写html?在编写直接html时,性能显然会比使用帮助程序更好.使用表单助手像惯例或铁轨开发人员必须遵循的东西?
我需要在列表中生成一个带有Default值的选择菜单<options>.这就是我需要它的样子.
<select name="menu[parent_id]" id="menu_parent_id">
<option value="0">==None==</option>
<option value="34">TEST</option>
</select>
Run Code Online (Sandbox Code Playgroud)
目前我select在我的表单中使用这个帮助器
<%= f.select(:parent_id, @parent_menus.collect {|p| [ p.name, p.id ] }, {:include_blank => '==None=='})%>
Run Code Online (Sandbox Code Playgroud)
上面的代码产生了这个; (value="")
<select name="menu[parent_id]" id="menu_parent_id">
<option value="">==None==</option>
<option value="34">TEST</option>
</select>
Run Code Online (Sandbox Code Playgroud)
这里有人能告诉我添加value="0"到选项列表的方法吗?
我正在使用collection_select字段,但是需要在默认选项前添加选项,这些选项不代表特定的模型记录,用于将appropriet字段设置为NULL.但我无法找到任何办法.
如果您需要更多信息,请不要随便询问.使用Rails 3.2.3与标准表单助手.
PS我知道我可以这样做:
@parents = ['default_name','nil']
@parents << Model.all.map {|item| [item.name,item.id]}
Run Code Online (Sandbox Code Playgroud)
但我认为有更优雅的方式.
我对rails上的ruby完全不熟悉,并尝试按照Form Helpers上的rails指南.当我尝试使用date_field助手时:
<%= date_field(:user, :born_on) %>
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
undefined method `date_field' for #<#<Class:0x007fa42ffe3dc0>:0x007fa42f82c410>
Run Code Online (Sandbox Code Playgroud)
我是否应该包含一些东西以便使用某些帮助者?谢谢!
我有一个Campaign带有channel列的模型.这channel将serialized通过复选框存储一系列选定结果.
这是模特..
应用程序/模型/ campaign.rb
class Campaign < ActiveRecord::Base
serialize :channels, Array
end
Run Code Online (Sandbox Code Playgroud)
应用程序/控制器/ compaigns_controller.rb
class CampaignsController < ApplicationController
def index
@campaigns = Campaign.all.order("created_at DESC")
end
def new
@campaign = Campaign.new
end
def create
@campaign = Campaign.new(campaign_params)
if @campaign.save
zip = Uploadzip.find(params[:uploadzip_id])
zip.campaign = @campaign
zip.save
flash[:success] = "Campaign Successfully Launched!"
redirect_to @campaign
else
flash[:error] = "There was a problem launching your Campaign."
redirect_to new_campaign_path
end
end
def show
@campaign = Campaign.includes(:program, :uploadzip, …Run Code Online (Sandbox Code Playgroud) 我正在尝试禁用选择标记.填充我们的非数据库属性而不是整数数组的选项,所以collection_select似乎在这种情况下不起作用.
技术1:
select_tag(:zev_qty, options_for_select(display_quantity(@order_subject_supplies_request.site), {:disabled => display_quantity(@order_subject_supplies_request.site)}))
def display_quantity(site)
if site
site.open_site? ? [[0,0],[1,1],[2,2]] : [[0,0],[1,1]]
else
[]
end
end
Run Code Online (Sandbox Code Playgroud)
以上不是我想要的.它禁用选项而不是select标签.
技术2:
f.select(:zev_qty, display_quantity(@order_subject_supplies_request.site), {:disabled => true})
def display_quantity(site)
if site
site.open_site? ? [0,1,2] : [0,1]
else
[]
end
end
Run Code Online (Sandbox Code Playgroud)
以上不起作用.没有禁用任何选项.
虽然在两种情况下都会在下拉列表中显示正确的值,但是未禁用select标记,并注意在此示例中,我只是将disabled设置为true,但我当然会有条件地禁用select标记.
我试图保存多个选定的值,形成由rails helper select生成的多选字段.
<div class="form-group">
<%= f.label :available_type, "Available in category" %><br>
<%= f.select :available_type, options_for_select(Setting.subscription_type, @terminal.available_type), { }, { class: "form-control", :multiple => true, :size => 5 } %>
</div>
Run Code Online (Sandbox Code Playgroud)
这样渲染(所选值来自先前的尝试,没有":multiple => true"属性,完美地工作):
<select class="form-control" id="terminal_available_type" multiple="multiple" name="terminal[available_type][]" size="5">
<option value="Postpaid">Postpaid</option>
<option value="MBB">MBB</option>
<option selected="selected" value="Prepaid">Prepaid</option>
</select>
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏.:)
编辑:
我试过把serialize :available_type我的终端模型,dident改变任何东西.: - /
编辑2: 我注意到,当我标记它们时,多个选择的字段不会将选项标记为已选中.如果我手动添加选定的属性我得到这些参数:
{"utf8"=>"?", "_method"=>"patch", "authenticity_token"=>"RrwWlKk8XlGeC+dTu/w6oSM68e9LcbUFJWTI+eRS9mI=", "terminal"=>{"inndate"=>"2015-01-13", "outdate"=>"", "brand_id"=>"2", "name"=>"iPhone 5c", "available_type"=>["", "MBB", "Prepaid"], "product_number"=>"3r2342", "ean_code"=>"", "navision_nb"=>"324234", "cost_price_map"=>"3200.0", "manual_price"=>"", "sales_info"=>"Just sell!"}, "commit"=>"Submit", "action"=>"update", "controller"=>"terminals", "id"=>"2"} …Run Code Online (Sandbox Code Playgroud) 我试图在Rails单选按钮上使用Zurb基金会的开关元件.
我有这个代码:
<%= simple_form_for @mymodel .... |f| %>
<%= f.input :active, as: :radio_buttons %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这会生成是和否单选按钮.
我现在正在尝试实施zurb基础开关,因为它看起来更好.
默认开关的示例代码:
<div class="switch">
<input id="x" name="switch-x" type="radio" checked>
<label for="x" onclick="">Off</label>
<input id="x1" name="switch-x" type="radio">
<label for="x1" onclick="">On</label>
<span></span>
</div>
Run Code Online (Sandbox Code Playgroud)
问题是,它看起来像这样:
<div class="switch">
<div class="input radio_buttons optional mymodel_active">
<label class="radio_buttons optional">active</label>
<span class="radio">
<input class="radio_buttons optional" id="mymodel_active_true" name="mymodel[active]" type="radio" value="true">
<label class="collection_radio_buttons" for="mymodel_active_true">Yes</label>
</span>
<span class="radio">
<input checked="checked" class="radio_buttons optional" id="mymodel_active_false" name="mymodel[active]" type="radio" value="false">
<label class="collection_radio_buttons" …Run Code Online (Sandbox Code Playgroud) 现在我连续两个表格
<section>
<%= render 'shared/micropost_form_purchase' %>
<%= render 'shared/micropost_form_sale' %>
</section>
Run Code Online (Sandbox Code Playgroud)
然后是_micropost_form_purchase.html.erb
<%= form_for(@micropost) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="field no-indent">
<%= f.text_area :content, placeholder: "What's something else you want to buy?" %>
<%= f.hidden_field_tag :type, :value => "purchase" %>
</div>
<%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
对于_micropost_form_sale.html.erb我有
<%= form_for(@micropost, :html => { :id => "sale" }) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="field no-indent">
<%= …Run Code Online (Sandbox Code Playgroud)