我是初学者,试图把一些东西放在一起。我正在浏览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>
答案 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