在 rails 中保存单选按钮值

Posted

技术标签:

【中文标题】在 rails 中保存单选按钮值【英文标题】:Saving radio buttons values in rails 【发布时间】:2011-10-31 16:41:45 【问题描述】:

我正在尝试在我的 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>

我纠正了我的错字(':actionsto: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 

谢谢!

【问题讨论】:

您的代码对我有用。你有更多信息吗? 日志是否显示请求正在以预期值发布? 抱歉,我对此有点陌生 - 日志是什么? 【参考方案1】:

我认为您的form_for 调用中有一个错误:应该使用:url =&gt; :actions =&gt; "update_status" 而不是:url =&gt; :action =&gt; "update_status"

【讨论】:

你说得对,我确实有那个错字,但由于某种原因它仍然无法正常工作! 正在使用attr_protectedattr_accessible 通话吗?也许问题出在模型内部。【参考方案2】:

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

【讨论】:

以上是关于在 rails 中保存单选按钮值的主要内容,如果未能解决你的问题,请参考以下文章

自动填充单选按钮

如何在rails中正确使用单选按钮?

Rails 上的单选按钮

如何在 Rails 中为带有单选按钮的帖子分配一个类别?

Rails 单选按钮:根据模型/数据库条目设置默认值

从 Rails 4 视图上的单选按钮获取输入