Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery和AJAX在RubyonRails中将参数从控制器传递到javascript,再传递到渲染视图_Jquery_Ruby On Rails_Ajax - Fatal编程技术网

使用jQuery和AJAX在RubyonRails中将参数从控制器传递到javascript,再传递到渲染视图

使用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.

我正在尝试Ajaxify一个RubyonRails应用程序,以避免在用户交互后重新加载每个页面

现在,我设法在幕后创造了一个新想法,但一旦它被创造出来,我就不再展示它了

这是我的密码:

创意视图中的表单:

<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,这正是我需要的。我接受了你的答案,但不幸的是,我还得等几个声望点来投票。。。