- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我仍在掌握 Rails 的窍门。我在这里使用 Rails 3,目标基本上是在我单击订阅按钮时触发 AJAX 调用,post_form 部分呈现在我刚刚订阅的主题下方。然后该按钮变为取消订阅按钮,并且 post_form 部分被删除。按钮的切换单独起作用(即:通过删除紧随其后的两个片段中的第二行),但 *post_form* 部分的呈现不起作用。
问题是我似乎无法在以下两个部分中获得正确的语法和/或传递参数。主题对象未被传递,单击订阅或取消订阅按钮时出现 NilClass 错误的无效模型名称。如果我手动刷新页面,部分内容会以正确的方式呈现或隐藏,所以实际上只是 AJAX 部分无法正常工作。
views/subscription/create.js.erb
$("#subscription_form").html("<%= escape_javascript(render('users/unsubscribe')) %>");
$("#post_form").html("<%= escape_javascript(render('shared/post_form', :topic => @topic)) %>");
views/subscription/destroy.js.erb
$("#subscription_form").html("<%= escape_javascript(render('users/subscribe')) %>");
$("#post_form").html("<%= escape_javascript(render('shared/post_form', :topic => @topic)) %>");
views/users/_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
views/shared/_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 %>
如果有任何帮助,关系是:
post -> belongs_to -> topic and topic -> has_many -> posts
最佳答案
看起来您正在“views/_post_form.html.erb”文件中使用变量“@post”。
<%= form_for(@post) do |f| %>
由于您没有在操作中的任何地方设置该变量,因此您会收到空引用错误。
你需要做这样的事情:
def create
@post = Post.find(the_post_id)
@topic = Topic.find(params[:subscription][:topic_id])
current_user.subscribe!(@topic)
respond_with @topic
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 %>
我没有现成的 ruby 环境,所以我无法验证这是否能解决您的问题,但我认为它应该能让您朝着正确的方向前进。
关于javascript - 轨道 3 javascript : How to render a partial with parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11584658/
我是一名优秀的程序员,十分优秀!