Rails 3 javascript:如何使用参数渲染分部
Rails 3 javascript: How to render a partial with parameters
我仍然掌握Rails的窍门。在这里,我使用的是Rails 3,其目标基本上是当我单击订阅按钮时触发AJAX调用,post_form partial将在下面呈现给我刚刚订阅的主题。然后,该按钮将变成一个取消订阅按钮,post_formpartial将被删除。按钮的切换单独起作用(即:通过删除紧随其后的两个片段中的第二行),但*post_form*部分的呈现则不起作用。
问题是,在下面的两个部分中,我似乎无法获得正确的语法和/或参数传递。主题对象没有被传递,当单击订阅或取消订阅按钮时,我得到了一个无效的model_name for 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/dedestroy.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和topic->has_many->posts
看起来您正在使用"views/_post_form.html.erb"文件中的变量"@post"。
<%= form_for(@post) do |f| %>
由于您没有在操作中的任何位置设置该变量,因此会出现null引用错误。
你需要做这样的事情:
def create
@post = Post.find(the_post_id)
@topic = Topic.find(params[:subscription][:topic_id])
current_user.subscribe!(@topic)
respond_with @topic
end
此外,您将"topic"变量作为本地变量传入,但将其作为实例变量访问。您应该将_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环境,所以我无法验证这是否能解决你的问题,但我认为这应该会让你朝着正确的方向前进。
- 在函数参数中使用变量,无论是否使用Jquery
- 为什么要将Array.prototype.slice.call与参数一起使用
- 在 Javascript 函数中对参数值使用特殊字符时出现 Javascript 错误
- 无法访问 PHP 中的参数,使用 Serialize 从 jQuery 发布值
- 添加其他参数以使用fin上传器发送到服务器
- 在新对象参数中使用“this”选择器
- 函数中的拾取参数和使用原始参数的回调
- 参数在使用 Google Apps 脚本的 Google 云打印中不起作用
- 为什么 Javascript 中的参数在使用 console.log 时返回 [对象参数]
- JavaScript循环承诺在参数中使用数组进行迭代
- 如何使用 AJAX(不是 Jquery AJAX)发送参数并使用 PHP 接收它
- 如何在函数参数中使用循环并将结果记录到控制台
- 围绕JavaScript参数对象使用的Sonar违规
- 在带有Coffeescription的函数参数中使用哈希
- 如何发送类似“<>"在参数中使用$.ajax-to-server
- 改变& lt; video>参数onclick使用JavaScript
- 在Angular链接函数和访问指令参数中使用$compile
- 如何在查询参数中使用IN
- 在Angular指令参数中使用HTML
- Freebase:如何使用参数“光标”使用JavaScript