Rails 4.0.4,想要在item.done == true时呈现为已选中的复选框

时间:2014-04-29 13:10:41

标签: jquery ruby-on-rails checkbox

我正在构建我的todo应用程序作为我未来产品组合的项目。目前它缺乏许多功能,并且患有可怕的恶劣代码疾病。我打算用一些运气和一些技巧来打磨它,或许有一天它会帮助我找到一份初级开发工作或者至少是一名实习生; - )

目前,我正在与复选框进行肮脏的斗争。如果他们连接的项目具有Item.done == true,我希望它们(并保持!)被检查,否则它们应该被取消选中。我尝试在check_box_tag中实现它,如果item.done == true有条件地添加checked =“checked”prop,但它失败了。我现在使用的黑客有一些缺陷:

0)(非常抱歉为您提供这样的WET,潮湿,淫秽的MOIST代码) 1)如果我看过一个非常糟糕的代码的缩影 2)它并不总是有效 - 如果您快速连续检查多个框,所有框都将呈现为空。 3)它似乎不对,老实说

链接到github: https://github.com/Demoniszcze/todo_app

链接到heroku: http://murmuring-citadel-7289.herokuapp.com/

_items.html.erb:

<table>
    <tbody>
        <% @items.order('created_at asc').each do |item|%>
            <tr>
                <td><%= check_box_tag "item-#{item.id}", item.id, false, 
                    data: {
                    remote: true,
                    url: url_for(action: :do_item, id: item.id),
                    method: :patch,
                    done: item.done
                    } %>
                </td>
                <td width="300px"><div class="items" id="item-<%= item.id %>"><%= item.content %></div></td>
                <td><%= link_to "delete", item_path(item.id), method: :delete, remote: true %></td>
            </tr>   
        <% end %>
    </tbody>
</table>
<script>
(function() {
    $('input[data-done="true"]').prop('checked', 'checked');
    $('input[data-done!="true"]').removeAttr('checked');
})();
</script>

items_controller.rb:

def do_item
    @items = Item.all
    @item = Item.find(params[:id])
    respond_to do |format|
      if @item.done 
        if @item.update(done:false)
          format.html { redirect_to :index }
          format.js {}
        else
          format.html { redirect_to :index }
        end


      else

        if @item.update(done:true)
          format.html { redirect_to :index }
          format.js {}
        else
          format.html { redirect_to :index }
        end

      end

    end
  end

是的,使用jQuery每单一friggin时间。当我看到这个时,上帝让我的眼睛受伤。拜托,请告知。

1 个答案:

答案 0 :(得分:0)

(不知道你是否已经尝试过这个,这可能也会缺少一些互动,但是:)

当我查看docs for check_box_tag时,它有一个checked州的参数:

check_box_tag(name, value = "1", checked = false, options = {})

使用item.done作为第三个参数时是否有用?

check_box_tag "item-#{item.id}", "1", item.done