我仍然得到Rails的支持。在这里,我使用的是Rails 3,目标基本上是当我点击订阅按钮时触发AJAX调用,post_form部分在我刚刚订阅的主题下呈现。该按钮然后变成一个不可置换按钮,并且post_form部分被删除。单独切换按钮可以起作用(即:通过移除紧接的两个片段中的第二行),但* post_form *局部的渲染不会。Rails 3 javascript:如何渲染带参数的部分
问题是我似乎无法得到正确的语法和/或传递参数在以下两个部分。主题对象只是没有通过,当点击订阅或取消订阅按钮时,我得到一个无效的model_name NilClass错误。如果我手动刷新页面,部分将以正确的方式呈现或隐藏,所以它只是AJAX部分不能正常工作。
的意见/订阅/ create.js.erb
$("#subscription_form").html("<%= escape_javascript(render('users/unsubscribe')) %>");
$("#post_form").html("<%= escape_javascript(render('shared/post_form', :topic => @topic)) %>");
的意见/订阅/ destroy.js.erb
$("#subscription_form").html("<%= escape_javascript(render('users/subscribe')) %>");
$("#post_form").html("<%= escape_javascript(render('shared/post_form', :topic => @topic)) %>");
的意见/用户/ _subscription_form.html.erb
<% unless current_user?(@user) %>
<div id="subscription_form">
<% if current_user.subscribed?(@topic) %>
<%= render 'users/unsubscribe', :topic => @topic %>
<% else %>
<%= render 'users/subscribe', :topic => @topic %>
<% end %>
</div>
<% end %>
controllers/subscriptions_controller.rb
组class SubscriptionsController < ApplicationController
before_filter :signed_in_user
respond_to :html, :js
def create
@topic = Topic.find(params[:subscription][:topic_id])
current_user.subscribe!(@topic)
respond_with @topic
end
def destroy
@topic = Subscription.find(params[:id]).topic
current_user.unsubscribe!(@topic)
respond_with @topic
end
end
的意见/共享/ _post_form.html.erb
<%= form_for(@post) do |f| %>
<div class="field">
<%= f.hidden_field :topic_id, :value => @topic.id %>
<%= f.text_area :content, placeholder: "Tell us about it ..." %>
</div>
<%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>
如果是的任何帮助,关系是:
后 - > belongs_to的 - >话题和主题 - >的has_many - >帖子
有没有你为什么要做“respond_with @topic”的原因?由于您已经按常规命名了视图,因此您应该能够保留这些视线。 – awbergs 2012-07-20 19:15:33