Rails表单不会从另一个控制器呈现

时间:2017-09-17 09:08:52

标签: ruby-on-rails

我正在制作一个简单的待办事项列表应用程序,我在todos / new模板中有以下代码

todos/new.html.erb

<div class="new-task">
    <%= form_tag {controller: "todos", action: "new"} , method: "post", class: "form-group" do %>
        <div class="row">
            <div class="col-md-8 col-sm-8">
                <%= text_field_tag "todos[task]", "", class: "form-control" %>
            </div>
            <div class="col-md-4 col-sm-4">
                <%= submit_tag "Add", class: "btn btn-primary" %>
            </div>
        </div>
    <% end %>
</div>

当我尝试使用

从另一个控制器的视图渲染此视图时
<%= render template: 'todos/new' %>

我在下面的堆栈跟踪中遇到了一个令人讨厌的错误。

SyntaxError in ToolsController#index

app/views/todos/new.html.erb:2: syntax error, unexpected ':', expecting '}'
app/views/todos/new.html.erb:2: syntax error, unexpected ',', expecting '}'
app/views/todos/new.html.erb:2: syntax error, unexpected tLABEL
app/views/todos/new.html.erb:2: syntax error, unexpected ',', expecting keyword_end
app/views/todos/new.html.erb:2: syntax error, unexpected keyword_do, expecting keyword_end
app/views/todos/new.html.erb:19: syntax error, unexpected keyword_ensure, expecting end-of-input
app/views/tools/index.html.erb:18:in `_app_views_tools_index_html_erb__1039417368_95034624'

请帮助解决这个问题。提前谢谢!

1 个答案:

答案 0 :(得分:0)

  

form_tag(url_for_options = {},options = {},&amp; block)

     

form_tag助手接受2个参数:action和的路径   选项哈希。此哈希指定表单提交和方法   HTML选项,例如表单元素的类

在你的情况下,你需要在花括号和括号内的其余选项之间包装控制器和动作,如:

<%= form_tag({controller: 'todos', action: 'new'}, class: 'form-group') do |form| %>
  ...

这样Rails会将哈希值转换为有效的URL。

通过传递对应于控制器和动作的URI,可以实现同样的目的,如:

<%= form_tag('/todos', class: 'form-group') do |form| %>
  ...

请注意,如果在form_tag和括号之间留下空格,则会出现syntax error, unexpected tLABEL append= form_tag错误,并且form_tag帮助程序的默认方法是POST,因此您无需在此处指定情况下。