繁体   English   中英

使用 jQuery 和 AJAX 将参数从控制器传递到 javascript 以在 Ruby on Rails 中呈现视图

[英]Passing parameters from controller to javascript to rendered view in Ruby on Rails with jQuery and AJAX

我正在尝试对 Ruby on Rails 应用程序进行 Ajaxify,以避免在用户交互后重新加载每个页面。

我现在设法在幕后创建了一个新想法,但一旦创建就不再展示它。

这是我的代码:

在想法视图中形成:

<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

在想法视图中创建.js.erb:

$("<%= escape_javascript render(:file => 'ideas/new_proposition.html.erb') %>").insertBefore('#end_of_propositions_list');

其中“end_of_propositions_list”是显示的想法列表的唯一标识符。

我正在努力解决以下问题:

如果想法视图中的new_proposition.html.erb视图类似于:

<div>
  New proposition added
</div>

使用不引用任何对象或变量的代码,它可以工作,即用户可以看到发生了什么的确认。 因此,我知道在浏览器中启动的远程操作击中了击中局部视图的 javascript 模板的控制器。

现在我希望新创建的想法出现,使用检索其属性并处理格式的部分。 我觉得我需要将新创建的想法的 id 从想法控制器中的创建操作传递给由 format.js 调用的 create.js 脚本,然后传递给部分,以便它知道从数据库中提取什么想法.

我不知道如何处理从 create 控制器操作传递到 create.js 和局部视图的这个参数,非常感谢您的帮助。

我觉得还不错……? 那么接下来要做的是将实例变量@idea 从控制器传递给部分:

$("<%= escape_javascript render(
    :file => 'ideas/new_proposition.html.erb', 
    :idea => @idea) %>")
.insertBefore('#end_of_propositions_list');

然后在您的视图中访问@idea:

<div>New proposition added</div>
<div>Title: <%= @idea.title => </div>

希望有帮助

在该控制器呈现的视图中,您可以使用 @ 访问变量,因此在 create.js 中,您可以直接访问 @idea.id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM