SkillsController中的SyntaxError #new

时间:2014-06-20 06:25:08

标签: ruby-on-rails html5 view syntax erb

我的new.html.erb视图中出现语法错误。我的代码是:

<h1>Add new skill</h1>
<%= form_tag :action => 'create' %>
<p><label for="skill_title">Title</label>:
<%= text_field 'skill', 'title' %></p>
<%= collection_select :skill, :id, Skill.all, :id, :name %>
<%= submit_tag "Create" %>
<% end %>
<%= link_to 'Back', {:action => 'list'} %>

我的错误是:

SyntaxError in SkillsController#new
app/views/skills/new.html.erb:10: syntax error, unexpected keyword_ensure, expecting end-of-input

它指向我代码的最后一行。我错过了一个结局吗?我试过了,但没用。感谢任何能够发现我的错误的人,希望这是一个简单的错误。

app/views/skills/new.html.erb:2: syntax error, unexpected =>, expecting ')' ...r.append= form_tag (:action => 'create') do @output_buffer... ... ^ C:/HandCoOp/project/HandCoOp/app/views/skills/new.html.erb:2: syntax error, unexpected ')', expecting keyword_end ... form_tag (:action => 'create') do @output_buffer.safe_appe... ... ^ C:/HandCoOp/project/HandCoOp/app/views/skills/new.html.erb:10: syntax error, unexpected keyword_ensure, expecting end-of-input

2 个答案:

答案 0 :(得分:2)

如果你看错了,就说:

SyntaxError in SkillsController#new
app/views/skills/new.html.erb:10: syntax error, unexpected keyword_ensure, expecting end-of-input

当您尝试关闭未打开的循环时会出现此类错误。

修复:

<h1>Add new skill</h1>
<%= form_tag :action => 'create' %>
<p><label for="skill_title">Title</label>:
<%= text_field 'skill', 'title' %></p>
<%= collection_select :skill, :id, Skill.all, :id, :name %>
<%= submit_tag "Create" %>
<% end %>  # this is the culprit of your error
<%= link_to 'Back', {:action => 'list'} %>

但是看看你的代码它是一个表格,所以你的结局应该在那里,但你忘了打开你的循环:

<h1>Add new skill</h1>
<%= form_tag({action: "create"}) do %> #forgot this do to open your loop
  <p><label for="skill_title">Title</label>:
  <%= text_field 'skill', 'title' %></p>
  <%= collection_select :skill, :id, Skill.all, :id, :name %>
  <%= submit_tag "Create" %>
<% end %>  # this is the culprit of your error
<%= link_to 'Back', {:action => 'list'} %>

答案 1 :(得分:2)

form_tag

为了清楚起见,@user2675613指出了以下内容:

<%= form_tag ({action: "create"}) do %>
  <%= ... %>
<% end %>

根据Rails docs,您必须在do声明的末尾使用form_tag,才能让Ruby block工作用。

如果这不起作用,我会看看你如何在form_tag声明中定义你的路线。您目前只使用action;我会使用path helper来正确定义路线

-

错误

您遇到的问题如下:

  

意外的keyword_ensure,期待输入结束

这基本上意味着您没有在某个块上调用end,或者创建了code block而没有正确定义各种参数。使用do基本上定义了Ruby,您将使用块,因此将查找end标记;这应该是您需要的修复


<强>更新

在提及您的新错误时,它似乎要求您在某处包含)。看more Rails docs,我会说这是你必须要做的事情:

<%= form_tag ({action: "create"}) do %>

EG

<%= form_tag({:action => 'create'}, {:id => 'anID'}) %>