【问题标题】:check box not showing check Rails复选框未显示检查 Rails
【发布时间】:2011-03-28 12:39:58
【问题描述】:

我有一个接受子属性的父模型。

class User < ActiveRecord::Base

accepts_nested_attributes_for :spec

attr_accessible :name, :spec_attributes

在视图中,我有一个获取 3 个模型信息的表单。我使用通用的 form_tag。

<% form_tag(action)  do %>
.
.
.
    <% fields_for "user[spec_attributes]" do |spec_form|%>
    <%= spec_form.check_box :alert_greeting %> 
    <%= spec_form.label :alert_greeting, "Email me when new greetings are posted" %>
    <% end %>

<% end %>

在控制器中

@user = User.find(session[:user_id])
   if @user.update_attributes(params[:user])

   do something.
   end

数据库正在更新,一切似乎都在工作。

但是,当我返回表单再次编辑时,即使复选框的值显示为 1,该复选框也未选中。

关于如何将复选框显示为应该被选中的任何想法?

非常感谢。

【问题讨论】:

  • 尝试通过检查参数值添加选中选项:alert_greeting
  • 您如何看到复选框的值为“1”?这是在新表单上还是只是数据库值存储为 1。
  • 当我查看源代码时,我看到 value=1 但隐藏字段设置为 0。我还在终端和数据库中传递的参数中看到它。我只是不明白为什么它没有显示在表单上如果 value=1 ????
  • 另外,当我查看传递的参数时,我看到值是 1,我也在数据库中看到它。
  • 您看到 value=1 的复选框和 value=0 的隐藏字段的原因是 Rails 处理复选框的方式 - 它会创建一个隐藏字段,以便如果复选框不是t 被选中,一个值仍然被提交给服务器(如果它们没有被选中,复选框通常不会发送任何数据)。

标签: ruby-on-rails forms nested-attributes


【解决方案1】:

您需要引用您呼叫的用户中的特定spec 记录。尝试改变

<% fields_for "user[spec_attributes]" do |spec_form|%>

<% fields_for @user.spec do |spec_form|%>

您需要确保在您的编辑控制器操作中为用户构建了一个非零规范对象(但不一定保存)。

【讨论】:

  • 谢谢布赖恩。当我这样做时,生成的参数似乎是:参数:{“@user.spec”=>{“alert_greeting”=>“0”}。但是我想得到 params = { :user => { :name => 'Jack', :spec_attributes => { :alert_greeting => '1' } } 如果我没有得到它的参数,那么数据库似乎没有得到更新。有什么想法吗?
【解决方案2】:

您可以使用两个 fields_for 调用来执行属性和嵌套属性,如下所示:

<%= form_tag(action) do %>
  ... other form tags ...
  <%= fields_for :user, @user do |f| %>

    <%= f.text_field :first_name %>
    <%= f.text_field :last_name %>

    <%= f.fields_for :spec do |s| %>
      <%= s.check_box :alert_greeting %> 
      <%= s.label :alert_greeting, "Email me when new greetings are posted" %> 
    <% end %>
  <% end %>
<% end %>

【讨论】:

  • 抱歉,我错过了你正在从 3 个模型中获取数据——我会更新我的答案来解决这个问题。
  • 老兄,你的摇滚明星。谢谢,我认为这是诀窍。我会尝试并回复您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多