我是一名Rails新手,遇到了一個我無法超越的問題。我已經找遍了所有,但無法找到一個有效的答案。我有一個允許用戶友誼的應用程序。這部分工作得很好。不過,我最近通過將朋友圈入圈子(有點像Google+)爲友誼添加了另一個級別。我遇到的問題是圓圈沒有保存在數據庫中。下面就來看看發生了什麼:ID未保存在Rails中
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
圓圈用戶到達表單之前已創建。我已經通過遷移將circle_id添加到了user_friendships表中,因此有一個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
發佈控制器操作代碼... –
表'user_friendships'的schema schema.rb文件。數據庫中設置了id autoincrement嗎? –
@PhilipHallstrom - 添加了控制器操作。 –