2011-01-13 9 views
1

とリンクによる振る舞いますレールは魔法のようにアイテムコントローラーに接続されていて、何とか魔法によって、新しいものと呼ばれる方法で 'new'メソッドを見ることを知っています。同一のファイルは異なり、私はRORと私の最初のアプリを構築し、原因MVCの私の理解</p> <p>に問題のカップルにつまずいた私は新しい項目を追加するためのページを持っており、この午前コントローラ

しかし、私は今

をapplication.html.erbする別のレイアウトを使用するので、新しい、同じ機能の異なるバージョンを作成するが、異なる表情でする必要があるとして、この層は、だから私がしようとすると、私を混乱させていますnew.html.erbのコピーを作成し、bookmarklet.html.erbを作成します。両方ともまったく同じコードを含みます:フォームへのリンク。しかし、ブックマークレットはコントローラーにそのリンクがないので私にはエラーが発生します - どうすれば新しいメソッドを呼び出すことができるようにブックマークレットをアップロードし、同じ方法で同様の振る舞いをすることができます。 html.erb

また、新しいbookmarklet.html.erbにapplication.html.erbを無視し、別のファイルからレイアウトを取得する方法を教えてください。事前

答えて

0

おかげで物事を考えるには良い方法ではなく、ビューhtml.erbファイルのコントローラで開始することです。したがって、コントローラの各パブリックメソッドは、実際にはサイト内のページまたはアクションです。新しいアクションやページが必要なときは、最初にコントローラにメソッドを追加します。関連するビューファイルを作成します。通常は、コントローラに手動でレンダリング呼び出す必要はありません

def bookmarklet 
    @item = Item.new(params[:item]) 
    @item.save 
    render :template => "items/bookmarklet.html.erb", :layout => "different_layout.html.erb" 
end 

ていますが、デフォルトとは異なるレイアウトをしたいので、次のように指定する必要があります。

だからあなたのコントローラであなたのような何かをする必要がありますレンダリングを使用しています。

+0

申し訳ありませんが、私はテンプレートをレンダリングしようとすると簡単な問題として私を殴ります。テンプレートがありません - これはレイアウトにbookmarklet.html.erbファイルを作成したときですか? {:ハンドラー=> [:erb、:rjs、:ビルダー、:rhtml、:rxml]、:formats => [:html]、:ロケール=> [:en、:en]}/users/toast/rails_projects/xxxx/app/views " – toast

+0

申し訳ありませんが、上記の誤りがありました。今すぐ完全なファイル名を指定する必要があるので、レンダリング行を更新しました。そして、あなたは "different_layout.html"というファイルを持っている必要があります。あなたのapp/views/layoutsディレクトリにある "erb"を編集してください。 –

+0

ah-ha .....レンダリング:template => 'layouts/bookmarklet'、:layout => 'layouts/bookmarklet'より複雑な部分! – toast

0

魔法はルートで起こります。 Railsは、RESTfulルートと呼ばれるものを使用します.RESTfulルートは、HTTP動詞を取得し、標準アクションを割り当てます。 newアクションはHTTPのGETリクエストであり、足場を使っている場合やRESTに従っている場合は、コントローラに新しいオブジェクトをビルドするためのRubyコールがインスタンス変数として作成され、ビューで使用できます。

あなたは、この手配をBREAKし、/ items/bookmarkletをコントローラで使用させたいということを、railsのルートに伝えなければなりません。あなたのroutes.rbをファイルに

お使いのコントローラプットで

resources items do 
    member do 
    get 'bookmarklet' 
    end 
end 

resources :itemsを置き換える:

def bookmarklet 
    @item = Item.new 
    render :template => "bookmarklet", :layout => "different_layout" # or you can put this on the top of the controller, which is my style, but whatevs. 
end 

彼らは非常にあなたのコードをクリーンアップとして、あなたはこれをやっている場合は、partialsになっているはずです。

関連する問題

 関連する問題