Ruby on Rails 如何从控制器注入 coffeescript 中的值

Ruby on Rails How to inject values from controller inside coffeescript

我在后端有控制器,并希望在 (coffee) 脚本中有变量,这些变量与模型一起发送到浏览器 - 但得到未定义的值。我做错了什么?我可以在模型中看到值。

控制器:

def show
    @article = Article.find(params[:id])
end

脚本article.coffee.erb:

$ ->
      $('#sendComment').click ->
        id = "#{@article.id}"
        console.log(id)

模型中:

%p
  %strong Title:
  #id
  = @article.id
%p
  %strong Title:
  = @article.title

如果 @article 是控制器变量,您需要使用 <%= @article.id %> erb 插值从控制器获取值。

$ ->
      $('#sendComment').click ->
        id = "<%= @article.id %>" # instead of "#{@article.id}" which is the CoffeeScript String interpolation. 
        console.log(id)

前端代码由浏览器解析,不知道控制器中的服务器端代码。资产编译一次,不会根据不同的请求而改变。你需要做的是在HTML标签中添加文章id,然后在你的JS代码中获取:

<%= tag.p data: { "article-id": @article.id } %>

然后在 JS 中:

$('p').click( (event) ->
  id = $(event.target).data('article-id')
  console.log(id)
)

不清楚您的视图代码中 #sendComment 在哪里,所以我在这里将其更改为 p。不过重点还是很明确的。