Javascript 在Rails中使用Ajax在分区上传递特定数据

Javascript 在Rails中使用Ajax在分区上传递特定数据,javascript,ruby-on-rails,ruby,ajax,Javascript,Ruby On Rails,Ruby,Ajax,我是rails的新手,我尝试做以下几点: 我正在创建一个存储和取消存储按钮,分别保存和取消保存事件。我使用我的事件属性和当前用户来查找存储的事件。通过使用ajax和rails的远程功能,我将能够将按钮的行为从存储更改为取消存储,反之亦然 在my\u feed.html.erb中 <% if @feed_items.any? %> <ul> <%= render partial: 'shared/feed_item', collection: @feed_

我是rails的新手,我尝试做以下几点:

我正在创建一个存储和取消存储按钮,分别保存和取消保存事件。我使用我的事件属性和当前用户来查找存储的事件。通过使用ajax和rails的远程功能,我将能够将按钮的行为从存储更改为取消存储,反之亦然

在my\u feed.html.erb

<% if @feed_items.any? %>
  <ul>
    <%= render partial: 'shared/feed_item', collection: @feed_items %>
  </ul>
<% end %>
<li id="<%= feed_item.id %>" class="item">
    ...
    <div class="small-3 text-center columns">        
      <%= render 'shared/store_form', event: feed_item %>
    </div>
    ...
</li>
<div id="store_form_<%= event.id %>">
    <% if event.stored?(current_user) %>
        <%= render 'shared/unstore', event: event %>
    <% else %>
        <%= render 'shared/store', event: event %>
    <% end %>
</div>

每个@feed_项都包含一组数据(标题、类别等)

在my\u feed\u item.html.erb

<% if @feed_items.any? %>
  <ul>
    <%= render partial: 'shared/feed_item', collection: @feed_items %>
  </ul>
<% end %>
<li id="<%= feed_item.id %>" class="item">
    ...
    <div class="small-3 text-center columns">        
      <%= render 'shared/store_form', event: feed_item %>
    </div>
    ...
</li>
<div id="store_form_<%= event.id %>">
    <% if event.stored?(current_user) %>
        <%= render 'shared/unstore', event: event %>
    <% else %>
        <%= render 'shared/store', event: event %>
    <% end %>
</div>
  • ... ...
  • 事件符号将该提要项发送到存储表单

    在my\u store\u form.html.erb

    <% if @feed_items.any? %>
      <ul>
        <%= render partial: 'shared/feed_item', collection: @feed_items %>
      </ul>
    <% end %>
    
    <li id="<%= feed_item.id %>" class="item">
        ...
        <div class="small-3 text-center columns">        
          <%= render 'shared/store_form', event: feed_item %>
        </div>
        ...
    </li>
    
    <div id="store_form_<%= event.id %>">
        <% if event.stored?(current_user) %>
            <%= render 'shared/unstore', event: event %>
        <% else %>
            <%= render 'shared/store', event: event %>
        <% end %>
    </div>
    
    
    
    我再次将feed_项传递到partial

    \u store.html.erb

    <%= form_for(event.storages.build(saver_id: current_user.id, 
                            organizer_id: event.user_id),
                            remote: true) do |f| %>
        <div>
            <%= f.hidden_field :organizer_id %>
            <%= f.hidden_field :saved_id, value: event.id %>
        </div>
      <%= f.submit "store" %>
    <% end %>
    
    <%= form_for(event.storages.find_by(saver_id: current_user.id,
                             organizer_id: event.user_id) ,
                 html: { method: :delete },
                 remote: true) do |f| %>
      <%= f.submit 'unstore' %>
    <% end %>
    
    $("#store_form").html("<%= escape_javascript(render 'shared/store', event: event )%>")
    
    $("#store_form").html("<%= escape_javascript(render 'shared/unstore', event: event) %>")
    
    
    
    \u unstore.html.erb

    <%= form_for(event.storages.build(saver_id: current_user.id, 
                            organizer_id: event.user_id),
                            remote: true) do |f| %>
        <div>
            <%= f.hidden_field :organizer_id %>
            <%= f.hidden_field :saved_id, value: event.id %>
        </div>
      <%= f.submit "store" %>
    <% end %>
    
    <%= form_for(event.storages.find_by(saver_id: current_user.id,
                             organizer_id: event.user_id) ,
                 html: { method: :delete },
                 remote: true) do |f| %>
      <%= f.submit 'unstore' %>
    <% end %>
    
    $("#store_form").html("<%= escape_javascript(render 'shared/store', event: event )%>")
    
    $("#store_form").html("<%= escape_javascript(render 'shared/unstore', event: event) %>")
    
    
    
    create.js.erb

    <%= form_for(event.storages.build(saver_id: current_user.id, 
                            organizer_id: event.user_id),
                            remote: true) do |f| %>
        <div>
            <%= f.hidden_field :organizer_id %>
            <%= f.hidden_field :saved_id, value: event.id %>
        </div>
      <%= f.submit "store" %>
    <% end %>
    
    <%= form_for(event.storages.find_by(saver_id: current_user.id,
                             organizer_id: event.user_id) ,
                 html: { method: :delete },
                 remote: true) do |f| %>
      <%= f.submit 'unstore' %>
    <% end %>
    
    $("#store_form").html("<%= escape_javascript(render 'shared/store', event: event )%>")
    
    $("#store_form").html("<%= escape_javascript(render 'shared/unstore', event: event) %>")
    
    $(“#存储表单”).html(“”)
    
    destroy.js.erb

    <%= form_for(event.storages.build(saver_id: current_user.id, 
                            organizer_id: event.user_id),
                            remote: true) do |f| %>
        <div>
            <%= f.hidden_field :organizer_id %>
            <%= f.hidden_field :saved_id, value: event.id %>
        </div>
      <%= f.submit "store" %>
    <% end %>
    
    <%= form_for(event.storages.find_by(saver_id: current_user.id,
                             organizer_id: event.user_id) ,
                 html: { method: :delete },
                 remote: true) do |f| %>
      <%= f.submit 'unstore' %>
    <% end %>
    
    $("#store_form").html("<%= escape_javascript(render 'shared/store', event: event )%>")
    
    $("#store_form").html("<%= escape_javascript(render 'shared/unstore', event: event) %>")
    
    $(“#存储表单”).html(“”)
    
    我在单击“存储/取消存储”事件时遇到这些错误

    ActionView::Template::Error (undefined local variable or method `event' for #<#<Class:0x00000004d69be8>:0x00000004d68d10>):
        1: $("#store_form").html("<%= escape_javascript(render 'shared/unstore', event: event) %>")
    
    
    ActionView::Template::Error (undefined local variable or method `event' for #<#<Class:0x00000004d69be8>:0x00000004fdc6a0>):
        1: $("#store_form").html("<%= escape_javascript(render 'shared/store', event: event )%>")
    
    ActionView::Template::Error(未定义的局部变量或#的“event”方法):
    1:$(“#存储表单”).html(“”)
    ActionView::Template::Error(未定义的局部变量或#的“事件”方法):
    1:$(“#存储表单”).html(“”)
    

    我的问题是,我如何将特定的“事件”数据传递到partial。我不能在create和destroy js中使用@feed_item,因为feed_item有一组事件。有没有更好的方法来处理这个问题

    在控制器的创建和删除操作中,您应该实例化变量event:change event by@event,并将js更改为:

    $("#store_form").html("<%= escape_javascript(render 'shared/unstore') %>
    
    $(“#存储表单”).html(“
    

    因为您不需要添加实例化变量来呈现调用,rails正在为您做这件事

    我将尝试这件事。如果它仍然不起作用,我会回答。但是我的部分on store和unstore需要显示来自事件集的每个事件状态。