【发布时间】:2021-04-10 04:25:06
【问题描述】:
我将 Rails 6.1.3 与 Ruby 2.7.2 一起用于大多数静态页面应用程序。该应用程序有一个注册表单,学生必须填写并下载为 PDF 文件才能打印,此时不需要持久性。它与 Dhalang(谷歌的 puppeteer wrap)gem 工作得很好,然后我为应用程序的不同部分做了一个 Javascript 例程,它停止工作。 该过程应该是:一个视图有一个按钮link_to路由“new_student_url”设置为“students_controller#new”操作应该让views/students/new呈现_form,此时我有按钮指向并识别路线,但当我点击它时,它只是忽略了事件;奇怪的是,如果我右键单击“在新选项卡中打开链接”按钮,它可以工作... =/ 我已经阅读了其他几个案例,发现其中大部分是由 Turbolinks 问题引起的,所以我确实检查了我使用 Webpack 设置的 Turbolinks 并且 app/javascript/packs/application.js 似乎没问题,请帮忙。
这是链接按钮:
<%= link_to "Cédula de Registro", new_student_url, class: "btn btn-success btn-lg", style: "color:#fff;", :data => { :turbolink => 'false' } %>
数据:Turbolinks 设置为 false 是为了解决另一个帖子中发现的问题。如果我将指针悬停在按钮上,我可以看到路线很好地指向
这些是我的相关路线:
get 'students/nuevo_ingreso', to: 'students#nuevo_ingreso', as: 'nuevo_ingreso'
resources :students
controller :students do
get '/convert/:id', to: 'students#convert', as: 'convert'
get '/pdf/:id', to: 'students#pdf', as: 'pdf'
end
我可以看到“$rails 路线”定义明确,并且链接指向正确的路线 这是 students_controller.rb 部分
class StudentsController < ApplicationController
before_action :set_student, only: %i[ show edit update destroy pdf ]
# GET /students or /students.json
def index
@students = Student.all
end
# GET /pdf
def pdf
# this method will be called by Dhalang
end
# GET /convert
def convert
_url = request.base_url + pdf_path
_pdf = Dhalang::PDF.get_from_url(_url)
_file_name = "CEBcedulaInscripcion"
File.open("#{Rails.root}/public/#{_file_name}.pdf", "w+b") << _pdf
redirect_to "/#{_file_name}.pdf"
end
# GET /students/1 or /students/1.json
def show
end
def nuevo_ingreso
end
# GET /students/new
def new
@student = Student.new
end
# GET /students/1/edit
def edit
end
# POST /students or /students.json
def create
@student = Student.new(student_params)
respond_to do |format|
if @student.save
format.html { redirect_to convert_path(@student) }
format.json { render :show, status: :created, location: @student }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @student.errors, status: :unprocessable_entity }
end
end
end
我包含视图部分只是为了完整性 这是学生/new.html.erb
<div class="container col-md-6">
<h1>CÉDULA DE INSCRIPCIÓN</h1>
<%= render 'form', student: @student %>
</div>
<%= link_to 'Back', students_path %>
这是学生/_form.html.erb
<%= bootstrap_form_for(@student) do |f| %>
<div class="control-box">
<h4>Datos Personales</h4>
<div class="field">
<%= f.text_field :name, label: "Nombre", class: "form-control-sm" %>
</div>
<div class="form-row">
<div class="col-md-4">
<div class="field">
<%= f.text_field :email, label: "Email", class: "form-control-sm" %>
</div>
</div>
...
<div class="control-box">
<h4>Seguridad Social</h4>
<div class="row">
<div class="col-md-4">
<div class="field">
<%= f.select :security_institution, [["ISSSTE", "ISSSTE"], ["IMSS", "IMSS"], ["SSA", "SSA"], ["Otro", "Otro"]], { label: "¿Cuenta con algún servicio Medico?", wrapper: { class: 'form-control-sm', data: { foo: 'bar' } } }, { class: "selectpicker" } %>
</div>
</div>
<div class="col-md-8">
<div class="field">
<%= f.text_area :medical_condition, label: "¿Recibe actualmente algún tratamiento Médico?", class: "form-control-sm" %>
</div>
</div>
</div>
</div>
<div class="container center">
<div class="row">
<div class="actions">
<%= f.submit "Generar PDF", target: "_blank" %>
</div>
</div>
</div>
<% end %>
最后,Gemfile:
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
ruby '2.7.2'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails', branch: 'main'
gem 'rails', '~> 6.1.3'
gem 'pg', '~> 1.1'
gem 'font-awesome-rails'
gem 'mini_racer'
gem 'puma', '~> 5.0'
gem 'sass-rails', '>= 6'
# Use bootstrap forms
gem 'bootstrap_form', '~> 4.0'
gem 'webpacker', '~> 5.0'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.7'
gem 'Dhalang'
gem 'bootsnap', '>= 1.4.4', require: false
group :development, :test do
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
gem 'pry-rails'
end
group :development do
gem 'web-console', '>= 4.1.0'
gem 'rack-mini-profiler', '~> 2.0'
gem 'listen', '~> 3.3'
gem 'spring'
end
group :test do
gem 'capybara', '>= 3.26'
gem 'selenium-webdriver'
gem 'webdrivers'
end
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
这是在 app/javascript/packs/application.js 中导入的 javaScript 代码(import "packs/static_pages")
$(function () {
$('.menu li:has(ul)').on("click", function(e) {
e.preventDefault();
if ($(this).hasClass('activado')) {
$(this).removeClass('activado');
$(this).children('ul').slideUp();
} else {
$('.menu li ul').slideUp();
$('.menu li').removeClass('activado');
$(this).addClass('activado');
$(this).children('ul').slideDown();
}
});
});
【问题讨论】:
-
data: { turbolink: false }有错别字,应该是data: { turbolinks: false }。你看看这是否能解决问题? -
不,它不起作用,我尝试了在其他帖子中找到的所有变体,这是它生成的最后一个 HTML:``` localhost:3000/students/new">Cédula de Registro```
-
这是应用程序仓库github.com/lflores1961/ceb6-1wp
标签: javascript ruby-on-rails ruby