2011-10-28 12 views
0

私は、次のしている:このRailsフォームを正しく処理していますか?私relationships_controllerで

class RelationshipsController < ApplicationController 

    def new 
    @user_id = User.find_by_id(params[:user_id]) 
    @relationship = Relationship.new 
    end 

    def create 
    @relationship = Relationship.new(params[:relationship]) 
    @relationship.rel_id = User.find_by_id(params[:user_id]) 
    @relationship.user_id = current_user 
    if @relationship.save 
     redirect_to root_url, :notice => "Signed Up!" 
    else 
     render "new" 
    end 
    end 
end 

と私は私の意見では:

<section id="main"> 
    <%= form_for [@user_id, @relationship] do |f| %> 
    <div class="field"> 
     <%= f.label :type %> 
     <%= select_tag(:type, options_for_select([['Friend', 0], ['Family', 1],['Spouse', 2]])) %> 
    </div> 
    <div class="actions"><%= f.submit %></div> 
    <% end %> 
</section> 

私はいくつか質問があります。

  1. を、これが正しい方法です。 rel_idとuser_idを処理しますか?それは私にとってちょっと不器用なようです。

  2. データベースに保存するには:typeを取得できませんが、それ以外はすべて行います。私は私のサーバーログに次を見つける:それはタイプを保存しなければならないので、私には奇妙に思える

Parameters: {"utf8"=>"✓", "authenticity_token"=>"z7R4tWSSVHZmFXfh8HocfyuegZ2rwuXXeTLKbR+cLfs=", "type"=>"0", "commit"=>"Create Relationship", "user_id"=>"7"}

を。

3 .. <%= form_for [@user_id, @relationship] do |f| %>行で@user_idまたは@ currentユーザーを使用すると問題はありますか?どうして?

答えて

1

1)@user_idは、実際にUserのインスタンスが割り当てられているので、私はあなただけのユーザーIDの値(整数)が必要だと思うrel_idを割り当てるとき、私はそれ@user を呼び出します。あなたはおそらくこれを行うことができます:

@relationship.rel_id = params[:user_id] 

2)typeフィールドがActiveRecordのとSTIのテーブルに使用されている、とあなたが他の理由で、あなたのフィールドtypeに名前を付けるならば悪いことが起こります。他の名前に変更してみてくださいrelationship_type

3)アプリの設定方法によっては可能です。 @user(_id)と@current_userは異なるユーザーを表す可能性があります。現在のユーザに自分自身の関係を作成させたいだけなら、@current_userを使うことができます(その場合はネストされたルートを使用しないでください)。

+0

'は人です'@ current_user'は盛んです。常に異なるユーザーである必要があります。私はそのチェックインをまだコード化していない。 –

+0

ネスティングのコメントでRailscast#139を見ました。そこに提案すると、これを入れ子にすることが適切だと私は思うようになります。そうでないと思われる理由はありますか? –

+0

その場合、ネストされたリソースは問題ありません。 current_userと比較して、@ userをユーザにしたいと思っているかどうか不安でした。 –

1

属性 "type"を呼び出すことは、既にActiveRecord :: Baseを継承するクラスの型メソッドを定義しているため、レールにはno-noです。単一テーブル継承に使用されます。

少なくとも痛みを伴うことは、「relationship_type」または「種類」に、その列の名前を変更することですが、あなたは本当にする必要がある場合は、このようにそれを回避することができます:user` @

@relationship = Relationship.new(params[:relationship]) 
@relationship[:type] = params[:type] 
+0

私はそれほど痛みを伴わないルートを取ったが、まだ保存していない。私は文句を言うことを期待していたでしょう:前にActiveRecordを継承している形式で問題があった場合は前に入力してください。 –

関連する問題