从控制器传递Params到JS.ERB文件? [Rails 3]

时间:2012-06-05 00:05:05

标签: javascript ruby-on-rails ruby-on-rails-3 forms parameters

我正在尝试允许用户将已保存的任务“导入”到教学大纲帖子中。教学大纲有许多任务,教学大纲形式是一个嵌套形式,用户可以在其中添加“添加任务”,这将添加一个新的任务文本框。

当我“导入”任务时,我想要javascript到  1.单击“添加任务”链接(添加嵌套表格)
 2.将“导入的任务”的值输入到ckeditor文本框中。

_IMPORT_FORM.HTML.ERB

 <%= form_tag(import_missions_path, :method => :post, :id => "import-js" )  do |f| %>
  <ul>
  <% current_user.folders.find_by_order(1).missions.each do |mission| %>
<li> <%= check_box_tag "mission_ids[]", mission.id %>
  <%= mission.id.to_s + ". " + mission.title %> </li>
  <% end %>
  </ul>
  <%= submit_tag "Import ", :class => 'btn btn-primary' %>
<% end %>

然后转到SYLLABUSES#IMPORT

def import
@missions_hash = []
    #loop through each mission id from :missions_id
params[:mission_ids].each do |id|
 @missions_hash << Mission.find(id)
end
respond_to do |format|
  format.html { redirect_to edit_syllabus_path(@syllabus), notice: "imported" }
  format.js { render 'folders/import.js' }
end
end

然后我想渲染IMPORT.JS.ERB文件,并传入@missions_hash。下面的代码可能是错误的,这是我需要帮助修复它的地方。

IMPORT.JS.ERB

//loop for each mission passed in 
<% @mission_hash.each do |mission| %>
  //click add missions
  $('#add-missions-button').trigger('click');
  //pass in mission.title & mission.content to form textbox value
<% end %>

将Ruby参数传递给此Javascript.erb文件的正确语法是什么?另外,我想将导入的任务的“标题”和“内容”复制到新添加的任务表单框中:

  <%= f.text_field :title, :class =>'row span6' %>
  <%= f.cktext_area :content, :toolbar => 'MyToolbar', :class => 'row span6', :rows => '5', :placeholder => "What is the first step a learner should do? (e.g. Watch an intro video, read certain article)" %>

如何将其复制到这些文本框的值中,以便用户在导入后进行编辑?

我意识到这个问题组织严密,但我试图尽可能简单地解释整个背景。我还是初学者,所以请理解..

2 个答案:

答案 0 :(得分:1)

好的,IMPORT.JS.ERB是javascript,将被发送回您的浏览器,但由于.ERB扩展名,它将被嵌入式ruby首先处理,在控制器的上下文中,然后发送到浏览器,所以你可以使用标准的ERB语法,

 <%= @something %>  

你的javascript中的任何地方都可以操纵发回的javascript,所以你可以这样做:

import.js.erb:

$('#somediv').html('<%= escape_javascript(@missions_hash.inspect) %>');

如果你的页面上有一个div ='someday'的div,那么它的内容应设置为mission_hash的转储。这也假设你正在使用AJAX,即:

<%= form_tag(import_missions_path, 
  :method => :post, 
  :id => "import-js" , 
  :remote=>true)  do |f| %>

但是,您需要TELL rails来预处理带有嵌入式ruby的javascript文件,因此您必须更改:

render 'folders/import.js'

render 'folders/import.js.erb'

有更简洁的方法来完成你想要的整体,但我认为你现在只需要想象我们的嵌入式ruby和javascript组合。

答案 1 :(得分:0)

我认为你不应该这样做,因为你会在sprocket编译时遇到问题。它将在文件更改时第一次编译。如果你想将变量传递给js,你可以尝试那个gem client variable