传承使用Ajax的Rails的谐音具体数据 [英] Passing specific data on partials using Ajax in 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屋!