使用jQuery和AJAX在RubyonRails中将参数从控制器传递到javascript,再传递到渲染视图
我正在尝试Ajaxify一个RubyonRails应用程序,以避免在用户交互后重新加载每个页面 现在,我设法在幕后创造了一个新想法,但一旦它被创造出来,我就不再展示它了 这是我的密码: 创意视图中的表单:使用jQuery和AJAX在RubyonRails中将参数从控制器传递到javascript,再传递到渲染视图,jquery,ruby-on-rails,ajax,Jquery,Ruby On Rails,Ajax,我正在尝试Ajaxify一个RubyonRails应用程序,以避免在用户交互后重新加载每个页面 现在,我设法在幕后创造了一个新想法,但一旦它被创造出来,我就不再展示它了 这是我的密码: 创意视图中的表单: <div id="new_proposition_form" style="display:none"> <%= form_for(@new_proposition, :remote => true) do |f| %> <%= f.
<div id="new_proposition_form" style="display:none">
<%= form_for(@new_proposition, :remote => true) do |f| %>
<%= f.text_field :title, :class => "proposition_input", :id => "new_proposition_input" %>
<%= f.hidden_field :created_by %>
<%= f.hidden_field :father_id %>
<%= f.hidden_field :procontra %>
<%= f.hidden_field :created_at %>
<% end %>
</div>
def create
@idea = Idea.new(params[:idea])
@idea.created_at = Time.now
respond_to do |format|
if @idea.save
format.html { redirect_to play_path, :notice => 'Idea was successfully created.' }
format.json { render :json => @idea, :status => :created, :location => @idea }
format.js
else
format.html { render :action => "new" }
format.json { render :json => @idea.errors, :status => :unprocessable_entity }
end
end
end
$("<%= escape_javascript render(:file => 'ideas/new_proposition.html.erb') %>").insertBefore('#end_of_propositions_list');
在ideas视图中创建.js.erb:
<div id="new_proposition_form" style="display:none">
<%= form_for(@new_proposition, :remote => true) do |f| %>
<%= f.text_field :title, :class => "proposition_input", :id => "new_proposition_input" %>
<%= f.hidden_field :created_by %>
<%= f.hidden_field :father_id %>
<%= f.hidden_field :procontra %>
<%= f.hidden_field :created_at %>
<% end %>
</div>
def create
@idea = Idea.new(params[:idea])
@idea.created_at = Time.now
respond_to do |format|
if @idea.save
format.html { redirect_to play_path, :notice => 'Idea was successfully created.' }
format.json { render :json => @idea, :status => :created, :location => @idea }
format.js
else
format.html { render :action => "new" }
format.json { render :json => @idea.errors, :status => :unprocessable_entity }
end
end
end
$("<%= escape_javascript render(:file => 'ideas/new_proposition.html.erb') %>").insertBefore('#end_of_propositions_list');
$(“'ideas/new_proposition.html.erb')%>”).insertBefore('end_propositions_list');
其中,“提案列表的结束”是显示的想法列表的唯一标识符
我正在努力解决以下问题:
如果ideas视图中的new_position.html.erb视图类似于:
<div>
New proposition added
</div>
新增新命题
对于一个没有引用任何对象或变量的代码,它可以起作用,也就是说,用户可以看到对所发生事情的确认。因此,我知道在浏览器中启动的远程操作击中了控制器,控制器击中了javascript模板,javascript模板击中了部分视图
现在,我希望新创建的idea显示出来,使用一个分部来检索其属性并处理格式。
我觉得我需要将新创建想法的id从ideas控制器中的create操作传递到由format.js调用的create.js脚本,然后传递到partial,以便它知道从数据库中提取什么想法
我不知道如何处理这个参数从create controller操作传递到create.js和partial视图,非常感谢您的帮助。在该控制器呈现的视图中,您可以使用@访问变量,因此在create.js中,您可以直接访问@idea.id我觉得很好。。。?因此,您接下来要做的是将实例变量@idea从controller传递给partial:
$("<%= escape_javascript render(
:file => 'ideas/new_proposition.html.erb',
:idea => @idea) %>")
.insertBefore('#end_of_propositions_list');
$(“'ideas/new_position.html.erb”,
:idea=>@idea)%%>)
.insertBefore(“#命题列表的结尾”);
然后访问视图中的@idea:
<div>New proposition added</div>
<div>Title: <%= @idea.title => </div>
新增命题
标题:
希望这有帮助谢谢IBueno。然后如何将它从create.js视图传递到partial new_proposition.html视图?从视图中呈现的部分与主体视图具有相同的变量访问权限。无论如何,当你呈现一个部分时,你可以使用:locals向它传递变量,我给你一个例子:[code]'my_partial',:locals=>{var=>“some value”}%>[/code]现在在部分中你可以使用varI,我认为它只适用于.html.erb主体视图,而不是.js.erb视图。谢谢你,IBueno,这很有帮助。工作起来很简单。。。非常感谢,tw airbal,这正是我需要的。我接受了你的答案,但不幸的是,我还得等几个声望点来投票。。。