在Rails框架中,.erb
文件是嵌入式Ruby(Embedded Ruby)的缩写,它允许你在HTML中嵌入Ruby代码。.js.erb
文件是Rails特有的文件类型,它结合了JavaScript和ERB,允许你在JavaScript代码中嵌入Ruby代码。这种文件类型通常用于在客户端执行动态JavaScript代码,同时利用服务器端的Ruby逻辑。
.js.erb
文件中复用Rails控制器中的实例变量和辅助方法。.js.erb
文件主要分为两种类型:
.js.erb
文件,客户端执行其中的JavaScript代码。假设我们有一个简单的Rails应用,包含一个用户注册表单。我们希望在用户输入用户名时,实时检查用户名是否已被占用。
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def check_username
@username = params[:username]
@user_exists = User.exists?(username: @username)
respond_to do |format|
format.js
end
end
end
# config/routes.rb
Rails.application.routes.draw do
get 'check_username', to: 'users#check_username'
end
<!-- app/views/users/check_username.js.erb -->
<% if @user_exists %>
alert("用户名已被占用!");
<% else %>
alert("用户名可用!");
<% end %>
<!-- app/views/users/new.html.erb -->
<%= form_with model: @user, local: true do |form| %>
<%= form.label :username %>
<%= form.text_field :username, id: 'username' %>
<%= form.submit %>
<% end %>
<script>
document.getElementById('username').addEventListener('input', function() {
var username = this.value;
fetch('/check_username?username=' + encodeURIComponent(username))
.then(response => response.text())
.then(data => eval(data));
});
</script>
.js.erb
文件正确命名,并且控制器响应格式为format.js
。.js.erb
文件中可以访问。<%= @variable %>
而不是<% @variable %>
来输出变量值。通过以上步骤,你可以在Rails 6上成功呈现和使用.js.erb
视图,实现动态的JavaScript代码生成和执行。
领取专属 10元无门槛券
手把手带您无忧上云