验证后,simple_form select-field变为输入字段

时间:2012-08-13 08:42:59

标签: ruby-on-rails ruby ruby-on-rails-3 twitter-bootstrap simple-form

我使用simple_form和twitter boostrap结合使用我的rails应用程序。而且我有一个问题阻止了我。

<%= f.input :title %>
<%= f.input :url %>
<%= f.input :tag_list, :label => 'Tags' %>
<%= f.input :type_id, :collection => @types, :label_method => :type_name, :value_method => :id, :include_blank => false %>
<%= f.input :description %>

这创造了我很好的形式。但是当验证失败时,每个输入字段都会显示错误。 但不是选择字段,它只是从选择字段变为填充了id的普通输入字段,我不知道为什么。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

出于某些原因,似乎Rails + Bootstrap + Simple_form让您在验证后选择字段,当集合放入字段本身而不是控制器的操作时。这应该有效:

<%= f.input :title %>
<%= f.input :url %>
<%= f.input :tag_list, :label => 'Tags' %>
<%= f.input :type_id, :collection => Type.all.order('type_name'), :label_method => :type_name, :value_method => :id, :include_blank => false %>
<%= f.input :description %>

希望这有帮助。

答案 1 :(得分:1)

我需要更多信息来帮助你。 你能发布你的模特吗?或解释@types是什么以及它是什么。

这是关联的基本简单:

模型/ type.rb belongs_to :post

模型/ post.rb has_many :types

视图/后/ _form.html.haml = f.association :types

确保您有一个名为&#34; title&#34;的列。或&#34;名称&#34;对于类型。

答案 2 :(得分:1)

在呈现操作之前,您需要在方法创建更新中设置 @types 分别编辑

例如

def new
  @your_object = YourObject.new
  @types = Type.all
  ....
end

def create
    @your_object = YourObject.new(your_object_params)

    respond_to do |format|
      if @your_object.save
        format.html { redirect_to ... }
        format.json { render action: 'show' ... }
      else
        ### ! init data for the form ! ###
        @types = Type.all
        format.html { render action: 'new' }
        format.json { render json: ... }
      end
    end
end