如何在Rails 7中将Ruby代码与javascript相结合

jljoyd4f  于 2022-11-04  发布在  Ruby
关注(0)|答案(2)|浏览(117)

我需要将ruby代码与javascript结合起来,以显示依赖于服务器响应的内容。

应用程序/视图/帖子/索引.html.erb

<h1 class="text-center m-4 text-success">Posts</h1>
<div id="posts" data-controller="like" data-like-url-value="<%= like_posts_path %>">
    <div class="row">
        <% @posts.each do |post| %>
            <%= render post %>
        <% end %>
    </div>
</div>
<script>
    if(some condition){
       console.log("All Posts has been loaded successfully.")
    }
</script>

应用程序/控制器/帖子_控制器.rb

def index
   @posts = Post.all.order(id: :desc)
   if @posts.length > 0
     session[:post] = true
   end
end

我不得不在索引模板中使用索引操作会话变量,我不知道如何将ruby代码与javascript结合起来。

vlju58qv

vlju58qv1#

在服务器上设置并检查条件,并在服务器上呈现视图。这意味着您可以简单地使用ERB检查条件,然后在条件为true时添加一个<script>块。脚本块将在客户端上运行。


# in the controller

def index
  @posts = Post.all.order(id: :desc)
  @post_loaded = @posts.length > 0
end

# in the view

<h1 class="text-center m-4 text-success">Posts</h1>
<div id="posts" data-controller="like" data-like-url-value="<%= like_posts_path %>">
  <div class="row">
    <% @posts.each do |post| %>
        <%= render post %>
    <% end %>
  </div>
</div>

<% if @post_loaded %>
<script>
  console.log("All Posts has been loaded successfully.")
</script>
<% end %>
7vhp5slm

7vhp5slm2#

我有一个解决上述问题的办法,你问.

应用程序/控制器/帖子_控制器.rb

def index
   @posts = Post.all.order(id: :desc)
   if @posts.length > 0
     session[:post] = "some value"
   end
end

应用程序/视图/帖子/索引.html.erb

<h1 class="text-center m-4 text-success">Posts</h1>
<div id="posts" data-controller="like" data-like-url-value="<%= like_posts_path %>">
    <div class="row">
        <% @posts.each do |post| %>
            <%= render post %>
        <% end %>
    </div>
</div>
<script>
   let post = "<%= session[:post] %>";
   console.log(post);
</script>

相关问题