【问题标题】:Is there a reason why this form_tag element is always showing a syntax error?这个 form_tag 元素总是显示语法错误是有原因的吗?
【发布时间】:2019-12-03 02:19:53
【问题描述】:


我正在开发一个ruby on rails 应用程序,并且已经制作了一些核心元素,例如登录系统。但是,我正在尝试使用'erb' gem 创建一个注销按钮来加载文件并将它们包含在其他文件中,因此侧面的所有页面都有表单。但是,无论我如何编写 form_tag 元素,它都会引发语法错误,我不知道为什么。我在互联网上查看并粘贴了错误代码,但给出的解决方案仍然会引发相同的错误。
有什么帮助吗?

这里是代码:
app/controllers/session_controller.rb(摘录):

require 'erb'
...
  def home
    @page_title = 'Home'
    @topbarFile = File.read('file location') // not real
    ERB.new(@topbarFile, 0, "", "@topbar").result( binding ) // working! no errors
    if !session[:usrname].present?
      redirect_to '/login'
    end
    if session[:message].present?
      session.delete :message
    end
  end
  def delete
    if params[:commit].present?
      session.delete :usrname
      session.delete :id
      redirect_to '/login'
    end
  end
end

app/file location(不是真实位置):

<div class = 'topbar'>
    <% sessionState = session[:usrname].present? ? [session[:usrname]] : [] %>
    <% logoutState = session[:usrname].present? ? [] : ['Log out'] %>
    <% sessionState.each do |username| %>
        <span class = 'username'><%= username %></span>
        <%= form_tag({controller: :session, action: :delete}, :class => '--logout-form') do %>
            <%= submit_tag 'Log out' %>
        <% end %>
    <% end %>
    <% logoutState.each do |message| %>
        <a href = '/login'><% message %></a>
    <% end %>
</div>

app/views/session/home.html.erb:

<%= raw @topbar %> <!-- I have tried with raw(@topbar), still doesn't work -->

以下是错误:

(erb):6: syntax error, unexpected ')' ...:class => '--logout-form') do ).to_s); @topbar.<< "\n ... ... ^ (erb):8: syntax error, unexpected end, expecting ')' ; end ; @topbar.<< "\n ".freeze ^~~ (erb):9: syntax error, unexpected end, expecting ')' ; end ; @topbar.<< "\n ".freeze ^~~ (erb):13: syntax error, unexpected end-of-input, expecting ')'
Rails.root: xxx

Application Trace | Framework Trace | Full Trace
(erb):6: syntax error, unexpected ')'
(erb):8: syntax error, unexpected end, expecting ')'
(erb):9: syntax error, unexpected end, expecting ')'
(erb):13: syntax error, unexpected end-of-input, expecting ')'
(erb):6: syntax error, unexpected ')'
(erb):8: syntax error, unexpected end, expecting ')'
(erb):9: syntax error, unexpected end, expecting ')'
(erb):13: syntax error, unexpected end-of-input, expecting ')'
(erb):6: syntax error, unexpected ')'
(erb):8: syntax error, unexpected end, expecting ')'
(erb):9: syntax error, unexpected end, expecting ')'
(erb):13: syntax error, unexpected end-of-input, expecting ')'
app/controllers/session_controller.rb:65:in `home'

但是没有多余的括号!我不明白这个问题!为什么它不起作用?

PS。为什么堆栈跟踪重复了这么多次?

【问题讨论】:

  • 你可以尝试在类名中使用 " 而不是 '
  • 你这是什么意思?
  • this :class=> '--logout-form' 这样写 :class=> "--logout-form" 在类名周围使用双引号而不是单引号。
  • 在该上下文中使用 " 或 ' 没有区别

标签: html ruby-on-rails ruby backend


【解决方案1】:

试试form_tag({controller: :session, action: :delete, class: '--logout-form'})

查看文档中的 form_tag 助手 https://api.rubyonrails.org/v5.1.7/classes/ActionView/Helpers/FormTagHelper.html#method-i-form_tag

它可以采用 2 个选项哈希。 第一个选项 hash 类似于 helper url_for,第二个选项在文档中给出了额外的参数。

您在代码中所做的基本上是:

({controller: :session, action: :delete} #first hash of options, 
 :class => '--logout-form' #second hash of options with {} hash syntax, but without them.
)

我想这就是它崩溃的原因。

【讨论】:

  • 谢谢,但没用。仍然出乎意料')'
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 2014-08-05
相关资源
最近更新 更多