数据库中的Rails复选框更改

时间:2011-06-26 08:37:14

标签: ruby-on-rails ruby checkbox

我是初学者,试图把一些东西放在一起。我正在浏览Stack Overflow关于这个问题一段时间,但没有一个建议的东西工作(因为我知道Rails和Ruby正在改变很多 - 我想这是正常的。)

所以,事情是 - 我想在单击复选框时创建AJAX调用,然后在DB中更改一个布尔类型值。我的“对象”是任务,属性是“状态”。

我试过了:

<div class="header">  
<% form_for @task, :id => "status" do |f| %>  
<label><%= f.check_box :called, :onclick => "$('#status').submit()" %></label>  
<% end %>  
</div>

但它抱怨undefined method model_name for NilClass:Class。 你能帮忙解决这个问题吗?

非常感谢。


编辑:

嗯,还是那个讨厌的错误。也许问题出在周围?

<% @tasks.each do |task| %>
<div class="post" id="<%= task.id =%>">
<div class="header"><%= form_for(@task, :id => "status", :remote => true) do |f| %>
<label>
<%= f.check_box :called %>
<%= f.submit %>
<% end %> <span class="title"><%= task.title =%></span>
</label>

2 个答案:

答案 0 :(得分:1)

问题似乎是@task是零。 也许复制并粘贴控制器代码。

我通常会在“新”和“编辑”操作中包含非零@task

def new
  @task = Task.new
end

def create
  @task = Task.new(params[:task])
  ...
end

def edit
  @task = Task.find(params[:id])
end

我在这个例子中猜测@task是nil。

<小时/> 编辑:添加更好的方式来进行表单提交。

另外我建议不要使用:on_click html属性。 特别是,这不会发送ajax提交。

我建议你使用jquery rails helper来通过ajax发送它。 即添加:remote =&gt; form_for

的真实参数
<% form_for(@task, :id => "status", :remote => true) do |f| %>

同样在Rails&gt; 3中,您应该将<%=用于此类标记。

<%= form_for(@task, :id => "status", :remote => true) do |f| %>

让我们重写一遍

<%= form_for(@task, :id => "status", :remote => true) do |f| %>
  <%= f.check_box :called %>
  <%= f.submit %>
<% end %>
<script>
  jQuery(function($){
    // grab the form in this closure;
    var form = $("form#status");

    // hide the submit button
    form.find("input[type=submit]").hide();

    // set the click handler
    $("#task_called").click(function(){
      form.submit();
    });
  });
</script>

答案 1 :(得分:1)

您应该编辑您的问题而不是使用编辑发布答案:)

那么,答案就在那里:

1 <% @tasks.each do |task| %>
2 <div class="post" id="<%= task.id =%>">
3 <div class="header"><%= form_for(@task, :id => "status", :remote => true) do |f| %>
4 <label>
5 <%= f.check_box :called %>

第1行循环@tasks并创建task

但第3行是您致电@task而非task