0

私は Rails の初心者で、乗り越えられない問題に遭遇しました。SO全体を見てきましたが、うまくいく答えが見つかりません。ユーザーの友情を可能にするアプリがあります。その部分はうまく機能します。しかし、私は最近、友達をサークル (Google+ のようなもの) に入れることで、友情に別のレベルを追加しました。私が抱えている問題は、サークルがデータベースに保存されていないことです。何が起こっているのかを見てみましょう:

Processing by UserFriendshipsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"cupb6S+IdrxqSuEqgfqehJh++POHUMQQ9QqbQVrGtHk=", "user_friendship"=>{"circle_id"=>"9", "friend_id"=>"jimbo"}, "commit"=>"Yes, Add Friend"}
User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
User Load (0.1ms)  SELECT "users".* FROM "users" WHERE "users"."profile_name" = 'jimbo'     LIMIT 1
(0.0ms)  begin transaction
SQL (0.7ms)  INSERT INTO "user_friendships" ("circle_id", "created_at", "friend_id", "state", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?, ?)  [["circle_id", nil], ["created_at", Sun, 06 Jan 2013 17:40:30 UTC +00:00], ["friend_id", 2], ["state", "pending"], ["updated_at", Sun, 06 Jan 2013 17:40:30 UTC +00:00], ["user_id", 1]]
SQL (0.2ms)  INSERT INTO "user_friendships" ("circle_id", "created_at", "friend_id", "state", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?, ?)  [["circle_id", nil], ["created_at", Sun, 06 Jan 2013 17:40:30 UTC +00:00], ["friend_id", 1], ["state", "requested"], ["updated_at", Sun, 06 Jan 2013 17:40:30 UTC +00:00], ["user_id", 2]]

フォームは次のとおりです。

<%= simple_form_for @user_friendship, method: :post do |f| %>
<div class="form-inputs">
  <%= f.collection_select :circle_id, current_user.circles.all(:order => 'name'), :id, :name %>
</div>
<div class="form form-actions">
  <%= f.hidden_field :friend_id, value: @friend.profile_name %>
  <%= f.button :submit, "Yes, Add Friend", class: 'btn btn-primary' %>
  <%= link_to "Cancel", profile_path(@friend), class: 'btn' %>
</div>
<% end %>

協会は次のとおりです。

class UserFriendship < ActiveRecord::Base
  belongs_to :circle

class Circle < ActiveRecord::Base
  has_many :friends, through: :user_friendships

ユーザーがフォームに到達する前に、円はすでに作成されています。移行によって user_friendships テーブルに circle_id を追加したので、ID を保存する場所があります。私の人生では、ここで何がうまくいかないのかわかりません。フォームにエラーはなく、友情はまだ保存されていますが、サークルは保存されていません. 私は何が間違っているのでしょうか?

(さらに情報が必要な場合はお知らせください)

編集 これがコントローラーアクションです

def create
  if params[:user_friendship] && params[:user_friendship].has_key?(:friend_id)
    @friend = User.where(profile_name: params[:user_friendship][:friend_id]).first
    @user_friendship = UserFriendship.request(current_user, @friend)
    if @user_friendship.new_record?
      flash[:error] = "There was problem creating that friend request."
    else
      flash[:success] = "Friend request sent."
    end
    redirect_to profile_path(@friend)
  else
    flash[:error] = "Friend required"
    redirect_to root_path
  end
end

user_friendships テーブルは次のとおりです。

  create_table "user_friendships", :force => true do |t|
    t.integer  "user_id"
    t.integer  "friend_id"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
    t.string   "state"
    t.integer  "circle_id"
  end

  add_index "user_friendships", ["circle_id"], :name => "index_user_friendships_on_circle_id"
  add_index "user_friendships", ["state"], :name => "index_user_friendships_on_state"
  add_index "user_friendships", ["user_id", "friend_id"], :name => "index_user_friendships_on_user_id_and_friend_id"

リクエスト方法は次のとおりです。

  def self.request(user1, user2)
    transaction do
      friendship1 = create!(user: user1, friend: user2, state: 'pending')
      friendship2 = create!(user: user2, friend: user1, state: 'requested')

      friendship1.send_request_email
      friendship1
    end
  end
4

2 に答える 2

1

保存しない理由に対する簡単な答えcircle_idは、決して使用しないということです。

あなたが私たちに示すログメッセージから、それは次のようになりますparams[:user_friendship][:circle_id]

しかし、あなたはこれで何もしません。

次の変更をお勧めします

def self.request(user1, user2, circle)
  transaction do
    friendship1 = create!(user: user1, friend: user2, state: 'pending', circle: circle)
    friendship2 = create!(user: user2, friend: user1, state: 'requested', circle: circle)

    friendship1.send_request_email
    friendship1
  end
end

次に、コントローラーから渡します

于 2013-01-06T19:51:49.197 に答える
0

パラメータは params[:user_friendship][:circle_id] として取得されていると思います。このパラメータで circle_id を保存しているかどうかを確認してください。ビューから取得した circle_id が「整数」型かどうかも確認します。

于 2013-01-07T16:17:26.503 に答える