传承使用Ajax的Rails的谐音具体数据 [英] Passing specific data on partials using Ajax in Rails

查看:138
本文介绍了传承使用Ajax的Rails的谐音具体数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新来的铁轨和我想要做的是以下内容:

I'm new to rails and what I'm trying to do is the following:

我创建一个存储和unstore按钮保存和非救事件分别。我用事件属性和当前用户找到存储的事件。通过使用Ajax和钢轨的远程功能,我将能够改变从商店按钮的行为unstore反之亦然。

I'm creating a store and unstore button to save and 'un-save' the event respectively. I used my event attributes and current user to find that stored event. By using ajax and remote functionality of rails I will able to change the behavior of the button from store to unstore or vise versa.

在我的 _feed.html.erb

<% if @feed_items.any? %>
  <ul>
    <%= render partial: 'shared/feed_item', collection: @feed_items %>
  </ul>
<% end %>

每个@feed_items包含设定资料(名称,类别等)。

Each @feed_items contains set of data (title, category, etc).

在我的 _feed_item.html.erb

<li id="<%= feed_item.id %>" class="item">
    ...
    <div class="small-3 text-center columns">        
      <%= render 'shared/store_form', event: feed_item %>
    </div>
    ...
</li>

事件符号发送一个feed_item到store_form。

Event symbol sends that feed_item to the store_form.

在我的 _store_form.html.erb

<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_item为部分。

I pass again a feed_item into partial.

_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 %>

_unstore.html.erb

<%= 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 %>

create.js.erb

$("#store_form").html("<%= escape_javascript(render 'shared/store', event: event )%>")

destroy.js.erb

$("#store_form").html("<%= escape_javascript(render 'shared/unstore', event: event) %>")

和我点击店/ unstore事件时收到这些错误。

And I'm getting these errors when clicking store/unstore event.

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 )%>")

我的问题是,我怎么能传递一个特定的事件的数据到部分。我不能用@feed_item到创建和销毁JS,因为feed_item有组事件。有没有更好的方式来处理呢?

My question is, how can I pass that specific "event" data into the partial. I can't used @feed_item onto the create and destroy js because feed_item have the set of events. Is there any better approach to handle this?

推荐答案

在你的行动创建和删除,你应该实例化的变量事件的控制器:更改事件由@event和改变你的JS来:

In your action create and delete in the controller you should instantiate your variable event: change event by @event and change your js to:

$("#store_form").html("<%= escape_javascript(render 'shared/unstore') %>

因为你鸵鸟政策需要添加实例化瓦尔渲染调用,Rails是为你做

because you don´t need add instantiate vars to render calls, rails is doing for you

这篇关于传承使用Ajax的Rails的谐音具体数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆