Смена флажка Rails в БД - PullRequest
       2

Смена флажка Rails в БД

1 голос
/ 26 июня 2011

Я абсолютный новичок в рельсах, пытаюсь собрать вещи.Некоторое время я просматривал Stack Overflow об этой проблеме, но ни один из советов не сработал (и поскольку я знаю, что Rails и Ruby сильно меняются - я думаю, это нормально).

Итак, дело в том,- Я хочу создать вызов AJAX при установке флажка, а затем изменить одно значение логического типа в БД.Мой "объект" - это задача, а атрибут - "статус".

Я пытался:

<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 ]

1 голос
/ 26 июня 2011

Вы должны редактировать свой вопрос, а не оставлять ответ с правками:)

Ну, ответ лежит там:

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

1 голос
/ 26 июня 2011

Казалось бы, проблема в том, что @task равен нулю. Возможно скопируйте и вставьте код контроллера.

Обычно я бы включал ненулевой @task в действия "new" и "edit"

def new
  @task = Task.new
end

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

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

Я предполагаю, что в этом примере @task равен нулю.

<ч /> изменить: добавив лучший способ сделать форму отправки.

Также я бы предложил не использовать атрибут html: on_click. в частности, это не отправит ajax submit.

Я предлагаю вам использовать помощников jquery rails, чтобы отправить его через ajax. А именно добавьте параметр: remote => true в form_for

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

Также в Rails> 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...