2011-12-06 17 views
1

iphoneアプリケーションのバックエンドで、レールを使って作業しています。これはレール付きの私の最初の本当のプロジェクトです。別のコントローラの作成アクションを実行するには

このアプリは、プロジェクト管理アプリのようなものです。このアプリでは、ユーザーがユーザーアカウントを作成すると同時に、最初のプロジェクトを作成することもできます。したがって、ユーザーが情報を送信すると、ユーザーのコントローラーは、ユーザー情報とプロジェクト情報の両方を含むparamsで投稿要求を受け取ります。

私は現在、データベース内のすべての属性を持つユーザー情報を格納していますが、paramsにプロジェクト情報が含まれているかどうかを確認し、プロジェクトコントローラの作成アクションを実行したい場合もチェックします。

これは、2つの別々の投稿要求を実行するか、ユーザーモデルとプロジェクトモデルの関連付けを行い、次にユーザーコントローラーからProject.createを実行することで行うことができます。とにかくプロジェクト作成アクションが必要な場合は、代わりに乾いたままにして、何らかの形でプロジェクトコントローラの作成アクションを実行します。

これは可能ですか?それは少なくともphpとzendでは可能です。

答えて

0

を何が起こるか見て、あなたはおそらくモジュールにそれを抽出し、「それを混合に見てみたいですインクルードとしての "in"。

f = Foo.new 
f.my_colour # => "Foo coloured" 
f.make_blue 
f.my_colour # => "blue" 

b = Bar.new 
b.my_colour # => "Bar coloured" 
b.make_blue 
b.my_colour # => "blue" 
-1

だけControllerName.new(env).createを経由して、それを呼び出してみてください、あなたはコントローラ間で共有されるコードを持っていれば;-)

0

は、あなたがそれを行うべきではありません。

module SkyBlue 
    def make_blue 
    @my_colour = "blue" 
    end 
end 

class Foo 
    include SkyBlue 

    def initialize 
    @my_colour = "Foo coloured" 
    end 

    def my_colour 
    @my_colour 
    end 
end 

class Bar 
    include SkyBlue 

    def initialize 
    @my_colour = "Bar coloured" 
    end 

    def my_colour 
    @my_colour 
    end 
end 

次に、あなたは「混合の」モジュールの効果を見ることができます。

スキニーコントローラとは、コントローラアクションのコードが小さくなければならないことを意味します。

さまざまなコントローラーアクションを使用することができますが、実際には特定のアクションコードを小さくすることができますが、トレードオフがあります。あなたはカップリングを増やしています。アクションのコードを別のコントローラに依存させています。

決して行ってはいけません。コントローラーが他のコントローラーもやっている何かをする必要があるなら、それはOKです。ユースケースのようなアクションを考えてください。類似しているかもしれませんが、関連していない可能性があります。

抽象的には意味をなさないヘルパーメソッドにちょうど抽象的です。

関連する問題