【问题标题】:ActionView::SyntaxErrorInTemplate in AccountsController#profileAccountsController#profile 中的 ActionView::SyntaxErrorInTemplate
【发布时间】:2021-08-06 17:05:26
【问题描述】:

结束时出现意外结束,但我看不出问题出在哪里。 我的终端一直给我错误:ActionView::SyntaxErrorInTemplate (Encountered a syntax error while rendering template:

我的个人资料.html.erb

<% if @users.image.present?  %>
  <%= image_tag @users.image %>
<% end %>

<strong><h1><%= @users.full_name %></h1></strong>
<% if user_signed_in? %>
  <% if @user == current_user %>
    <%= link_to"Edit Profile", edit_user_registration_path(@user) %>
    <% if user_signed_in? && !@user? %>
      <% if current_user.following?(@user) %>
       <%= link_to"Unfollow", follows_path(user_id: @user.id), method: :delete %>
      <% else %>
       <%= link_to"Follow", follows_path(user_id: @user.id) %>
     <% end %>
    <% end %>
  <% end %>
<% end %>
<div> <%= @users.posts.count %> Posts </div>
<p><%= @users.full_name %></p>
<p><%= @users.description %></p>
<p><%= link_to @users.website if @users.website.present? %></p>
<%= @posts.each do |post|%>
<%= image_tag post.image %>
<% end %> 

【问题讨论】:

  • 首先查看错误消息并找到有问题的行。我猜它连接到&lt;% end %&gt; &lt;% end %&gt; &lt;% end %&gt;。
  • 代码没有正确缩进时很难发现这样的错误。

标签: html ruby-on-rails ruby erb ruby-on-rails-6


【解决方案1】:

我看到了两个错误,请纠正它们。首先没有@user?是最大的错误,另一个可能没有问题但没有空间&lt;%= link_to"Edit Profile"请尝试以下代码我已经更改并正确重新格式化。

<% if @users.image.present? %>
  <%= image_tag @users.image %>
<% end %>

<strong><h1><%= @users.full_name %></h1></strong>

<% if user_signed_in? %>
  <% if @user == current_user %>
    <%= link_to "Edit Profile", edit_user_registration_path(@user) %>
    <% if user_signed_in? && !@user %>
      <% if current_user.following?(@user) %>
        <%= link_to"Unfollow", follows_path(user_id: @user.id), method: :delete %>
      <% else %>
        <%= link_to"Follow", follows_path(user_id: @user.id) %>
      <% end %>
    <% end %>
  <% end %>
<% end %>

<div> <%= @users.posts.count %> Posts </div>
<p><%= @users.full_name %></p>
<p><%= @users.description %></p>
<p><%= link_to @users.website if @users.website.present? %></p>
<%= @posts.each do |post|%>
  <%= image_tag post.image %>
<% end %>

【讨论】:

  • 谢谢卡马尔先生,但我的 user.rb 模型中还有另一个错误(第 28 行附近):``` 26 27def following?(user) 28following.include?(user) 29end 30```
  • 那是不同的问题,所以把它和解释错误分开,社区会指导你。
  • 你说得对,!@user? 是问题所在。解析器将其读取为尝试的三元,例如!@user ? true : false 但是缺少额外的 true : false 部分,因此当解析器找到 end 时,它不知道如何处理它。关于link_to 的另一部分看起来很糟糕,但它在技术上语法上是允许的,例如def hello(name);name;end 然后是 hello"engineersmnky" #=&gt; "engineersmnky" 因为解析器确实将 String 识别为 hello 方法的参数。话虽如此,这仅限于 String 参数,所以最好避免它。
  • 感谢您的解释。
【解决方案2】:
<% if user_signed_in? && @user == current_user %>

      <%= link_to"Edit Profile", edit_user_registration_path(@user) %>
    <% if current_user.following?(@user) %>
        <%= link_to"Unfollow", follows_path(user_id: @user.id), method: :delete %>
    <% else %>
        <%= link_to"Follow", follows_path(user_id: @user.id) %>
    <% end %>
<% end %>

现在没事了:D

【讨论】:

    【解决方案3】:

    似乎问题就在这里

    <p><%= link_to @users.website if @users.website.present? %></p>
    

    改成

    <p><%= link_to 'User Website', @users.website if @users.website.present? %></p> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 2021-12-23
      相关资源
      最近更新 更多