使用javascript构建Rails应用程序

时间:2014-08-18 03:09:43

标签: javascript jquery ruby-on-rails

简单的问题,

在rails App中,做了一个脚手架

rails g scaffold Post title:string body:string

我想在前端javascript中添加简单条件

如果@posts存在,alert("exist") 否则,alert("no posts")

我可以添加此脚本inside views/posts/index.html.erb

<script>
    $(function () {
        if (<%=@posts.length%> > 2)
            alert("exist");
        else
            alert("no posts");
    });
</script>

<h1>Listing posts</h1>

<table>
  <thead>
  <tr>
    <th>Title</th>
    <th>Body</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>
  </thead>

  <tbody>
  <% @posts.each do |post| %>
      <tr>
        <td><%= post.title %></td>
        <td><%= post.body %></td>
        <td><%= link_to 'Show', post %></td>
        <td><%= link_to 'Edit', edit_post_path(post) %></td>
        <td><%= link_to 'Destroy', post, method: :delete, data: {confirm: 'Are you sure?'} %></td>
      </tr>
  <% end %>
  </tbody>
</table>

<br>

<%= link_to 'New Post', new_post_path %>

问题是,

<script>
    $(function () {
        if (<%=@posts.length%> > 2)
            alert("exist");
        else
            alert("no posts");
    });
</script>

我想把它分成一个单独的js文件。

所以,我把这段代码放在

assets/javascripts/posts.js

  $(function () {
            if (<%=@posts.length%> > 2)
                alert("exist");
            else
                alert("no posts");
  });

但是在这里,它不能使用&lt;%=%&gt;这个rails视图:(

有没有好的解决方案?

1 个答案:

答案 0 :(得分:0)

您可以使用帖子计数向表中添加数据属性,也许只能在某些页面上侦听。类似的东西:

# view
body class=controller_name
  table data-posts-count=@posts.length

# js
$("body.posts").load(function() {
  count = $(this).data("posts-count")

  if count > 2
    alert("exist");
  else
    alert("no posts");
});