我是rails的新手,我正在尝试做的是以下内容:
我正在创建一个商店并取消存储按钮以分别保存和“取消保存”该事件。我使用我的事件属性和当前用户来查找存储的事件。通过使用rails的ajax和远程功能,我可以将按钮的行为从存储更改为非存储,反之亦然。
在我的 _feed.html.erb 。
中<% if @feed_items.any? %>
<ul>
<%= render partial: 'shared/feed_item', collection: @feed_items %>
</ul>
<% end %>
每个@feed_items都包含一组数据(标题,类别等)。
在我的 _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。
在我的 _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传递给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) %>")
点击存储/取消存储事件时,我收到了这些错误。
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具有一组事件。有没有更好的方法来处理这个?
答案 0 :(得分:0)
在您的操作中,在控制器中创建和删除您应该实例化您的变量事件:通过@event更改事件并将您的js更改为:
$("#store_form").html("<%= escape_javascript(render 'shared/unstore') %>
因为你不需要添加实例化变量来渲染调用,rails正在为你做什么