在轨道中保存单选按钮值

时间:2011-08-21 18:25:26

标签: ruby-on-rails radio-button form-for submit-button

我正在尝试在rails应用程序中使用单选按钮。目前,按钮按预期显示在页面上,但在提交时不会保存该值。我认为问题实际上是我的提交按钮 - 按下时没有任何事情发生。

以下是带有单选按钮的页面代码:

<div class="form_row>
<%= form_for @term, :url=>{ :action =>"update_status" } do |f| %>
  <%= f.radio_button :status, 'on' %><b>On</b> <br/>
  <%= f.radio_button :status, 'off' %><b>Off</b> <br/>
  <%= f.radio_button :status, 'leave' %><b>Leave</b> <br/>
  <div class="actions">
    <%= f.submit "Change term status" %>
  </div>
<% end %>
</div>

我纠正了我的拼写错误(':actions to:action`)但它仍然无效。这里有更多信息......

单选按钮位于页面顶部,表单的其余部分位于页面下方。我有两个不同的提交按钮,一个用于单选按钮,另一个用于填写页面底部的空白信息。第二种形式完美无缺,但是当我点击“更改术语状态按钮”(应该通过调用update_status提交单选按钮的按钮时),没有任何反应。

以下是我的网页浏览的所有代码:

<h1> <%= @title %> </h1>

<div class="form_row>
<%= form_for @term, :url=>{ :action =>"update_status" } do |f| %>
  <%= f.radio_button :status, 'on' %><b>On</b> <br/>
  <%= f.radio_button :status, 'off' %><b>Off</b> <br/>
  <%= f.radio_button :status, 'leave' %><b>Leave</b> <br/>
  <div class="actions">
    <%= f.submit "Change term status" %>
  </div>
<% end %>
</div>

<%= form_for @term, :url=>{ :action=>"update" } do |f| %>     
  <div class="field">
    <%= f.label :course1, "Course 1" %><br />
    <%= f.text_field :course1 %>
  </div>
  <div class="field">
    <%= f.label :course2, "Course 2" %><br />
    <%= f.text_field :course2 %>
  </div>
  <div class="field">
    <%= f.label :course3, "Course 3" %><br />
    <%= f.text_field :course3 %>
  </div>
  <div class="field">
    <%= f.label :course4, "Course 4" %><br />
    <%= f.text_field :course4 %>
  </div>
  <div class="actions">
       <%= f.submit "Update" %>
  </div>
<% end %>

这两个定义都是:

 def update
    @term = Term.find(params[:id])
    @dplan=@term.dplan
    if @term.update_attributes(params[:term])
        flash[:success] = "Edit successful."
        redirect_to @dplan
    else
        flash[:success] = "Error"
        redirect_to @dplan
    end 
end 

def update_status
    @term = Term.find(params[:id])
    @dplan=@term.dplan
    if @term.update_attributes(params[:term])
        flash[:success] = "Term status changed."
        redirect_to @term  
    else
        flash[:success] = "Error"
        redirect_to @term 
    end 
end 

谢谢!

2 个答案:

答案 0 :(得分:2)

我认为您form_for电话中存在错误:不应使用:url => { :actions => "update_status" },而应使用:url => { :action => "update_status" }

答案 1 :(得分:2)

感谢http://railscasts.com/episodes/38-multibutton-form想出来!我想当你尝试在一个页面上使用两个表单时会发生一些奇怪的事情,最好的方法是组合表单但在我的术语控制器update定义中使用if语句来区分这两个按钮。谢谢你的帮助!