在我的应用程序中,我有一个新动作的表单,与我的编辑表单相同,相隔四或五行。
我遇到的问题是我的new.html.haml给了我一个错误,解释说它不知道“f”是什么。
f是“form_for @object do | f |”中的一个。
显然在我的新作品中,form_for的对象与编辑对象不同。
我认为这应该是一种常见的行为,但我似乎无法在rails文档中找到任何符合我需求的内容。
这是代码的快速示例
#new.html.haml
%div{ id: "StaticForms" }
= f.label :project_id
= f.collection_select :project_id, @projects, :id, :name,
{ selected: @edit.task.project_id },
{ class: "form-control", onchange: 'get_projects(this.options[this.selectedIndex].value);' }
- index = 1
- @project_tree.each do |task|
= render partial: "edit", locals: {task: task, index: index} // render here was okay before "layouting"
- index += 1
#form_layout.html.haml%html
%div{ :class => "col-md-12" }
%h2 Reporting
%div{ :id => "Form"}
= form_for @activity do |f|
= f.label :consultant_id
= f.collection_select :consultant_id, @consultants, :id, :name,
{ selected: current_user.consultant.id },
{ class: "form-control" }
= yield
你可以在new.html.haml文件中看到的JS标签“onchange:...”应该由我在布局文件fyi中的JS触发。
我遇到的错误是:“未定义的局部变量或方法`f'代表#<#:0x007feb84e6b848>”
有人可以提供链接或解释吗? :)
谢谢。 最好的问候。
编辑:添加了一些代码,并不认为它与此类问题相关:>
答案 0 :(得分:0)
#app/views/activities/_form.haml
= form_for activity do |f|
= f.label :consultant_id
= f.collection_select :consultant_id, @consultants, :id, :name,
{ selected: current_user.consultant.id },
{ class: "form-control" }
...
#app/views/activities/new.haml
= render "form", activity: @activity
#app/views/activities/edit.haml
= render "form", activity: @activity
答案 1 :(得分:0)
所以我最终解决了我的问题,我能够解决它。
新视图和编辑视图:
= render layout: 'form_activity', locals: {activity: @object} do |f| # here @objet depends on the controller method i.e. @activity for new, @edit for edit
= f.label ...
...
#relativly the same code in edit and new
_from_activity.html.haml(与上述视图位于同一文件夹中):
= form_for activity do |f|
... # some form stuff
= yield f # here i get back to new or edit code
... # some stuff - rest of the form.
这完美无缺!
布局内容 - 在收益之前。
-
查看内容 - 感谢线:1)渲染布局:...执行| f |在视图中,2)在布局中产生 f
-
布局内容 - 收益后。
感谢所有人的回答。
顺便说一句,我知道第一个问题并不是问我刚发布的结果。如果是这样,我道歉:/
最好的问候。