2011-06-21 7 views
0

私は今、レールを学び始めました。私のレールのバージョンは3.0.7です。 <%form_for:project_profile%><%form_for @project_profile%>の違いは何ですか?私はのform_for <%を使用する場合はform_for @project_profileとform_forの違いは何ですか?project_profile

  • :project_profile%>、それは私にエラーを与えるものではありませんが、フォームが実際に機能していない私は、次のような状況に入ったので、私はこの質問を持っています。

  • 私は<%のform_for @project_profile%>を使用している場合は、私はエラーを取得します:私は<% =のform_for @project_profileを使用する場合は0x00000103546d80>

  • :#<#のための未定義のメソッド `project_profile_path」を、:url => "/ projects /#{params [:project_id]}/profile/update" do | f | %>、それは動作しますが、コードは醜いです。


あなたはより良い私の問題の背景を理解するために以下のコードを参照することができます。

私はプロジェクトモデルとproject_profileモデルを持っています。 1つのプロジェクトに1つのproject_profileがあります。

次の2行は、routes.rbです。

match '/projects/:project_id/profile/edit' => "project_profiles#edit" 
match '/projects/:project_id/profile/update' => "project_profiles#update" 

@project_profileは(高度でのform_forこれは私の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 %> 

答えて

2

あなたは、リソースとRailsでのネストされたリソースroutingについて学ぶ必要があります。

コントローラの定義方法も従来とは異なります。 Getting StartedセクションのRailsガイドに関する記事はcovers thatです。

+0

私のコントローラが従来のものではないことを知っていて良かったです。大会に続いて私は進歩を助けました。 – ffmaer