【问题标题】:What are the differences between form_for @project_profile and form_for :project_profileform_for @project_profile 和 form_for :project_profile 有什么区别
【发布时间】:2011-06-21 21:56:26
【问题描述】:

我刚开始学习 Rails。我的 Rails 版本是 3.0.7。我想知道 有什么区别。我有这个问题是因为我遇到了以下情况:

  • 如果我使用 ,它不会给我一个错误,但表单实际上不起作用。

  • 如果我使用 ,我会得到一个错误:undefined method `project_profile_path' for #

  • 如果我使用 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 %>

【问题讨论】:

    标签: ruby-on-rails forms routing


    【解决方案1】:

    你应该了解 Rails 中的资源和嵌套资源routing

    你定义控制器的方式也不是传统的。在 Rails Guides on Getting Started 部分也有一篇文章covers that

    【讨论】:

    • 很高兴知道我的控制器不是传统的。遵循惯例帮助我继续前进。
    【解决方案2】:

    基本上来说,form_for @project_profile 是一种先进的(面向资源的),如今是首选的风格。如果您想更深入地研究这一点,API 本身很好地解释了差异。

    http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for

    干杯

    【讨论】:

    • 在routes.rb方面,我觉得使用resource比使用match更有条理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多