将ruby变量从控制器分配给javascript变量

时间:2012-12-03 03:08:47

标签: javascript ruby-on-rails variables

我一直在寻找各处,并尝试了我能找到的所有建议,但它仍然没有用。基本上我试图接受输入的内容,将其拆分为单独的单词,然后将每个单词作为链接。我试图从数据库中取一个值并将其传递给javascript,以便我可以在javascript中有一个变量是该值。这是代码:

在控制器中:

def show
  @icelandic_reader = IcelandicReader.find(params[:id])
  @icelandic_reader_json = @icelandic_reader.text.to_json;

respond_to do |format|
  format.html # show.html.erb
  format.json { render json: @icelandic_reader }
 end
end

在.js.erb文件中:

window.onload = function() {
  var myText = <%= @icelandic_reader_json %>;
  console.log("test1");
  var words = myText.split(" ");
  console.log("test2");
  var numWords = words.length;
  var textToInsert;

  for (var i = 0; i < numWords; i++) {
      console.log("inside for loop");
      textToInsert += "<a href=#>" + words[i] + "</a>" + " ";
  }

  document.getElementById('icelandic_reader_text').innerHTML = textToInsert;

}

我没有收到任何错误,但我没有看到任何测试控制台日志出现。我已经尝试了各种方法,我已经找到了如何分配ruby变量,但它只是不起作用。我有红宝石3.2.6。谢谢!

2 个答案:

答案 0 :(得分:1)

这对我来说很奇怪。如果@icelandic_reader.text只是一个字符串,为什么要在其上调用to_json?如果它是@icelandic_reader的属性,您可以从视图中访问它,那么为什么您甚至将它指定为实例变量?为什么你甚至需要render json电话? Rails只会在您的视图文件夹中查找show.js.erb

试试这个:

# controller

def show
  @icelandic_reader = IcelandicReader.find(params[:id])

  respond_to do |format|
    format.html # show.html.erb
    format.json 
  end
end

在你的js.erb:

# js.erb

var myText = "<%= @icelandic_reader.text %>";

答案 1 :(得分:1)

我只想关闭这个问题,这就是我回答自己问题的原因。 Teeg告诉我使用Gon,这最终为我工作,但他提出了一个评论,因此我无法将其作为答案投票。