You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SLIM视图翻译语法异常?点击注册按钮触发报错求助

解决Slim视图中Expected attribute错误

问题场景

Slim视图代码

/ app/views/registrations/new.html.slim

= render Forms::Headers::StandardComponent.new(header: t('users.registrations.new.header'))

= form_with model: @user, local: true, class: 'mt-8 space-y-6' do |form|
  = render Forms::Notifications::StandardErrorNotificationComponent.new(
      errors: form.object.errors,
      notification: t('users.registrations.new.prohibited_user_from_being_saved')
    )

  = render FormFieldComponent.new(form: form, label: t('users.registrations.new.email'), name: :email, type: 'email', required: true)
  = render FormFieldComponent.new(form: form, label: t('users.registrations.new.password'), name: :password, type: 'password', required: true)
  = render FormFieldComponent.new(form: form, label: t('users.registrations.new.password_confirmation'), name: :password_confirmation, type: 'password', required: true)

  .flex.items-center.justify-between
    = render Forms::Buttons::Submit::StandardComponent.new(label: t('users.registrations.new.submit'))

  .flex.items-center.justify-between.mt-4
    = render Forms::Buttons::Cancel::StandardComponent.new(label: t('users.registrations.new.cancel'), path: root_path)

对应Locale文件

# config/locales/users/registrations.en.yml
# Used in: app/views/users/registrations/new.html.slim
en:
  users:
    registrations:
      new:
        header: "Sign Up"
        email: "Email"
        password: "Password"
        password_confirmation: "Password Confirmation"
        submit: "Sign Up"
        cancel: "Cancel"
        already_have_an_account: "Already have an account?"
        prohibited_user_from_being_saved: "prohibited this user from being saved"

触发的错误

Showing /Users/joseph/app/views/registrations/new.html.slim where line #8 raised:

Expected attribute
  /Joseph/app/views/registrations/new.html.slim, Line 8, Column 22
notification: t('users.registrations.new.prohibited_user_from_being_saved')
                ^

错误原因

Slim模板解析器在处理多行哈希参数时,会将未加括号的t识别为属性名,而非方法调用,导致语法解析失败。

解决方法

方案一:给t()方法调用添加括号

修改错误行代码,用括号包裹国际化方法调用,明确告知Slim这是方法执行:

= render Forms::Notifications::StandardErrorNotificationComponent.new(
    errors: form.object.errors,
    notification: (t('users.registrations.new.prohibited_user_from_being_saved'))
  )

方案二:将参数调整为单行写法

把new方法的参数放在同一行,避免Slim的多行解析歧义:

= render Forms::Notifications::StandardErrorNotificationComponent.new(errors: form.object.errors, notification: t('users.registrations.new.prohibited_user_from_being_saved'))

方案三:使用括号包裹整个参数哈希

通过外层括号明确参数范围,帮助Slim正确解析:

= render Forms::Notifications::StandardErrorNotificationComponent.new({
    errors: form.object.errors,
    notification: t('users.registrations.new.prohibited_user_from_being_saved')
  })

内容的提问来源于stack exchange,提问作者EastsideDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:06:14