San*_*ago 6 forms ruby-on-rails
这是application.html.erb文件中的调用:
<%= render :partial => 'tasks/_new' %>
Run Code Online (Sandbox Code Playgroud)
这是部分渲染(_new.html.erb):
<% form_for @task do |f| -%>
<%= f.text_field :body %>
<%= submit_tag "Submit" %>
<% end -%>
Run Code Online (Sandbox Code Playgroud)
这是'tasks'控制器中的方法:
def new
@task = Task.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @task }
end
end
Run Code Online (Sandbox Code Playgroud)
这是我一直得到的错误消息:
Missing template tasks/__new.erb in view path app/views
Run Code Online (Sandbox Code Playgroud)
它说错误在这一行:
<%= link_to "tasks", tasks_path %> <%= render :partial => 'tasks/_new' %>
Run Code Online (Sandbox Code Playgroud)
该文件位于正确的目录中.奇怪的是_文件名中有一个额外的错误.当我放弃并重命名部分时__new.erb,这是我得到的错误:
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
Run Code Online (Sandbox Code Playgroud)
它说错误在这一行:
<% form_for @task do |f| -%>
Run Code Online (Sandbox Code Playgroud)
_正如Petros建议的那样,我也没有在代码中尝试过,但是它返回了与上面相同的错误,Called id for nil….
这是怎么回事?
您的代码中不需要_.它应该是:
<%= render :partial => 'tasks/new' %>
Run Code Online (Sandbox Code Playgroud)
第一个错误是因为您不需要将_放在:partial参数中.Rails负责这一点.这就是你得到双__的原因,因为Rails会为你准备一个.
第二个错误是你真正的问题.该错误表明@task为零.这是正确的,因为partial只知道容器视图知道什么,并且您在该特定时刻的视图没有从适当的控制器调用该操作.正如您(Baby Diego)已经发现并在下面的一条评论中指出的那样,您需要在部分中创建一个任务实例.我不知道是否有更优雅的解决方案,但也许有人可以在将来提出更好的建议.
感谢MattMcKnight通知我们部分本身只知道容器视图知道什么.
| 归档时间: |
|
| 查看次数: |
7408 次 |
| 最近记录: |