Rails形式非常奇怪地提交

时间:2013-05-07 18:17:22

标签: ruby-on-rails ruby-on-rails-3

我有流氓表格选择

<%= f.select(:title, options_for_select([['Pick a reason',{:value => 0}],['Title 2', {:value => 1}], ['Title 3', {:value => 3}])) %>

所以当有人从下拉列表中选择三个选项之一时,使用jquery我会在文本框中渲染三个中的一个。

<%= f.text_area :text , :rows => 10, :class=>"selectInput", :id=>"0", :style=>"display:none;", :value=>" text for pick reason"%>

<%= f.text_area :text , :rows => 10, :class=>"selectInput", :id=>"1", :style=>"display:none;", :value=>" text for title 1"%>

<%= f.text_area :text , :rows => 10, :class=>"selectInput", :id=>"2", :style=>"display:none;", :value=>" text for title 2"%>

但是无论选择什么选项,最后的text_area条目都会保存在数据库中。在这种情况下它

<%= f.text_area :text , :rows => 10, :class=>"selectInput", :id=>"2", :style=>"display:none;", :value=>" text for title 2"%>

我该如何避免?并确保屏幕上显示的内容是保存到数据库的内容。

这也是我的jquery

<script>
$(document).ready(function(){
    $('#bashing_title').change(function(){
        $(".selectInput").hide();
        $("#"+this.selectedIndex).show();
    });
});

</script>

2 个答案:

答案 0 :(得分:1)

虽然您在视觉上隐藏了几个textarea,但这并不能阻止它们全部被提交 - 并且Rails将使用要序列化的最后一个值。

相反,您应该有一个文本框,并根据所选选项修改内容:

<% text_values = {"text0" => "text for pick reason", 
                  "text1" => "text for title1", 
                  "text2" => "text for title2" } %>
<%= f.text_area :text , :rows => 10, :class=>"selectInput", 
                :style=>"display:none;", :value => "", 
                :data => text_values %>

<script>
   $(function(){
     $('#bashing_title').change(function(){
       var textArea = $(".selectInput");
       textArea.show().val(textArea.data('text' + this.selectedIndex));
     });
   });
</script>

答案 1 :(得分:0)

为什么不在placeholder而不是textarea中使用value

<%= f.text_area :text , :rows => 10, :class=>"selectInput", :id=>"2", :style=>"display:none;", :placeholder=>" text for title 2"%>

如果问题仍然存在,可能是因为这些字段仍存在于您的DOM中。尝试将您的jQuery代码修改为remove()那些不显示的字段而不是hide()