0

我试图制作一个按钮来添加一个表单来创建一个包含许多用户的任务,我把这个:

$("#more").click(function(){
    i++;
    $("#more").after("<%= select_tag 'user_id_"+i+"',options_for_select(User.all.map { |u| [u.email,u.id] }) %>");

});

对,这看起来很正常,但是这个标签是 Rails 的,出现这个:

< %= select_tag 'user_id_4',options_for_select(User.all.map { |u| [u.email,u.id] }) %><%= select_tag 'user_id_3',options_for_select(User.all.map { |u| [u.email,u.id] }) %><%= select_tag 'user_id_2',options_for_select(User.all.map { |u| [u.email,u.id] }) %>

我怎样才能让这个代码出现在 Rails 中?

更新:

当我尝试将代码 jquery 放在我的 .html.erb 中时,这不会执行,之前是在 application.js 中:

<script type="text/javascript">
$(document).ready(function() {

    var i = 1;
    $("#more").click(function(){
        i++;
        $("#more").after("<%= select_tag 'user_id_"+i+"',options_for_select(User.all.map { |u| [u.email,u.id] }) %>");

    });


});


</script>
4

1 回答 1

1

让我们尝试一下,这是一个疯狂的猜测,但我希望它能满足您的需求。您可以在新应用程序中尝试此操作。只需创建一个用户模型,播种一些数据,然后在您的资产组中添加 gem 'jquery-rails'。运行bundle install并重新启动您的服务器。

在您的assets/javascripts/application.js中,确保您至少有以下几行:

//= require jquery
//= require jquery_ujs
//= require_tree .

在您的users_controller.rb中,定义index方法以从数据库中获取所有用户并呈现索引模板,这非常简单,您只需这样做:

def index
  @users = User.all

  respond_to do |format|
    format.html
    format.js
  end
end

然后在views/users中编辑您的视图文件,并确保它被命名为index.html.erb。当您尝试使用浏览器访问 localhost:3000/users 时,将显示此视图(详细信息:这是一个 GET HTML 请求)。在您的视图中,您将编写 HTML 并嵌入 ruby​​,就像您通常所做的那样。现在只需创建一个 div 并给它一个 id “更多”,你还可以放置一个带有属性的链接remote

<%= link_to 'click me', users_path, remote: true %>

然后在views/users中创建一个新的视图文件并将其命名为index.js.erb。您注意到扩展名发生了变化,现在我们使用js.erb而不是html.erb。详细说明:当您的页面将向您的users#index路由发出 javascript 请求(在本例中为 GET JS)时,它将以index.js.erb视图响应。这里最大的好处是您可以在此视图中编写 javascript 代码,该代码将在您的浏览器中执行。

你还记得我们添加remote: true到链接吗?这告诉 Rails 通用一个将发出 JS 请求的链接。魔法。

所以现在你只需要在你的views/users/index.js.erb文件中写一些javascript 代码。让我们从一些超级简单的事情开始:

alert('Hello');

转到您的页面(通常为 localhost:3000/users)并单击“单击我”链接,您应该会看到显示的 javascript 警报框。

让我们进行第二次测试,并集成一些 ruby​​ 代码。通过以下方式更改您的视图/用户/index.js.erb的内容:

alert('Ruby compute: <%= 1+1 %>');

在您的网页中,您将看到带有测试“Ruby 计算:2”的警报。您只需要在您的应用程序中使这种技术适应您的情况,瞧。

可以在此 railscast 上找到相同的技术(但有更好的解释):http: //railscasts.com/episodes/136-jquery

于 2013-03-19T12:41:28.310 回答