如何解决form_for @project_profile和form_for:project_profile有什么区别
|| 我刚刚开始学习Rails。我的rails版本是3.0.7。我想知道<%form_for:project_profile%>和<%form_for @project_profile%>之间有什么区别。我有这个问题,因为我遇到了以下情况: 如果我使用<%form_for:project_profile%>,它不会给我一个错误,但是该表单实际上不起作用。 如果我使用<%form_for @project_profile%>,则会收到错误:#<#:0x00000103546d80>的未定义方法`project_profile_path \' 如果我使用<%= form_for @project_profile,:url => \“ / projects /#{params [:project_id]} / profile / update \”做| f | %>,它可以工作,但是代码很难看。 您可以参考以下代码来更好地理解我的问题的上下文。 我有一个项目模型和一个project_profile模型。一个项目有一个project_profile。 以下两行来自我的routes.rb。match \'/projects/:project_id/profile/edit\' => \"project_profiles#edit\"
match \'/projects/:project_id/profile/update\' => \"project_profiles#update\"
这是从我的project_profiles_controller.rb
class ProjectProfilesController < ApplicationController
def edit
@project_profile = Project.find(params[:project_id]).project_profile
end
def update
@project_profile = Project.find(params[:project_id]).project_profile
respond_to do |format|
if @project_profile.update_attributes(params[:project_profile])
format.html {}
else
format.html { render :action => \"edit\" }
end
end
end
end
以下代码来自_form.html.erb
<%= form_for @project_profile,:url => \"/projects/#{params[:project_id]}/profile/update\" do |f| %>
<div class=\"field\">
<%= f.label :title %>
<br/>
<%= f.text_field :title %>
</div>
<div class=\"actions\">
<%= f.submit %>
</div>
<% end %>
解决方法
您应该了解Rails中的资源和嵌套资源路由。
定义控制器的方式也不是常规的。在“ Rails入门指南”部分中也有一篇文章对此进行了介绍。
, 基本上来说,form_for @project_profile是一种高级的(面向资源),是当今的首选样式。如果您想更深入地了解这一点,API本身就可以很好地解释两者之间的区别。
http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for
干杯
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。