我正在为#edit_profile视图重新开发.haml form_for,以容纳已经声明了#edit和#update方法的控制器。我之前使用标准方法使用了表单,但显然Rails在幕后做了很多我现在必须指定的并且我被卡住了。
我是那种通过模仿和破坏来学习的人,所以我需要一个例子。我没有运气就google了,所以我希望有人可以指点我。具体来说:我在哪里放置方法:: patch和update_profile路径?
我只需要haml。我已经确定控制器使用新方法(#edit_profile和#update_profile),所以我所要做的就是将表单连接到控制器。
如果有人需要,这是存储库: https://github.com/sidhene/MetPlus_PETS/blob/Update_CompanyPerson-%23146/app/views/company_people/edit_profile.html.haml
提前致谢, 甲
答案 0 :(得分:1)
url
参数必须是update_profile
操作而不是update
操作。将update_company_person_path(@company_person)
更改为update_profile_company_person_path(@company_person)
修改:您的config/routes看起来是正确的,但只需确定即可运行rake routes
。您应该看到其中包含update_profile_company_person
和PATCH
的行。
答案 1 :(得分:1)
form_for
获取一个值并从中填充其他HTML属性(action
/ method
等):
form_for
生成一个合适的表单标记,并生成一个表单生成器对象,该对象知道表单所针对的模型。如您所见,HTML反映了多个位置的资源知识,例如表单应提交的路径,或输入字段的名称。
form_for
的整个点是您要将资源 / 对象传递给它。
从模型填充,此对象/资源将包含一个数据数组,例如Class
名称等,然后Rails用它来填充表单。
根据文档:
...要创建新人,您通常会在
PeopleController#new
操作@person
中设置新的Person实例,并在视图模板中将该对象传递给form_for
:<%= form_for @person do |f| %>
为此生成的HTML将是(模数格式化):
<form action="/people" class="new_person" id="new_person" method="post">
因此,如果您想为表单推断出不同的path
/ url
,则需要明确定义它:
= form_for @profile, url: profile_update_path(@profile) do |f|
-
在您的情况下,您使用的是nested resource
,这意味着您必须将路线的两个部分作为数组传递:
= form_for [:company_person, @company_person] do |f|
这应该适合你。