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
相关产品推荐
相关产品推荐

