ユーザー テーブルと接続テーブルを持つアプリがあります (接続を友人と考えてください。user_id = current_user および otheruser_id = 表示しているユーザー プロファイル)。current_user がその接続を編集できるようにするユーザー プロファイルのリンクがあります。ユーザー表示ページの form_for は次のとおりです: (更新コード):
<% unless current_user == @user %>
<% if @connection.blank? %>
How do you know <%= @user.first_name %>? (<%= link_to "edit contact", { :controller => 'connections', :action => 'create', :id => :connection } %> )
<% else %>
<%= @user.first_name %> is your <%= @connection.description %> (<%= link_to "edit contact", { :controller => 'connections', :action => 'edit', :id => @connection.id } %> )
<% end %>
ただし、上記の編集リンクをクリックすると、次のエラーが表示されます。
ActiveRecord::ConnectionsController#edit の RecordNotFound ID=2 [WHERE "connections"."user_id" = 1] の接続が見つかりませんでした
表示ページの user_id を接続テーブルの connection_id として使用しているように見えます (上記の例では、user_id 2 を見ています)。正しいIDに変更するにはどうすればよいですか?
接続コントローラー:
class ConnectionsController < ApplicationController
def update
@connection = current_user.connections.find(params[:id])
if @connection.update_attributes(params[:connection])
flash[:notice] = "Contact relationship updated"
redirect_to @user
end
end
def edit
@connection = current_user.connections.find(params[:id])
redirect_to @user
end
def create
#@user = User.find(params[:user_id])
@connection = current_user.connections.build(params[:connection])
if @connection.save
flash[:success] = "Contact relationship saved!"
redirect_to @user
else
render @user
end
end
end
必要に応じてユーザー コントローラー:
def show
@user = User.find(params[:id])
@connection = current_user.connections.build(:otheruser_id => @user)
end
編集リンクと作成リンクで user_id の代わりに正しい connection_id を使用するにはどうすればよいですか?
また、私が気付いたもう 1 つの問題は、アプリが if ステートメントの最初の条件をバイパスしていることです。@connection がなくても、接続があると仮定した状態までスキップしています。
お時間をいただき、誠にありがとうございます。私は本当にここで立ち往生しています。ありがとう!
EDIT 1:念のためルートを追加する:
authenticated :user do
root :to => 'activities#index'
end
root :to => "home#index"
devise_for :users, :controllers => { :registrations => "registrations" }
resources :users do
member do
get :following, :followers, :posts, :comments, :activities, :works, :contributions, :connections
end
end
resources :works do
resources :comments
end
resources :relationships, only: [:create, :destroy]
resources :posts
resources :activities
resources :reposts
resources :comments do
member do
put :toggle_is_contribution
end
end
resources :explore
resources :connections
end
編集2:
明確にするために、上記のエラー メッセージで、user_id = 2 プロファイルを表示していますが、現在接続が存在しないため (ローカル パージを実行しただけです)、ビューには作成パスへのリンクが表示されているはずです (新たに発見された問題)。とにかく、connection_id の代わりに user_id を使用しているようです。接続が既に存在する場合でも、id = 2 ではなく 1 で接続を編集する必要があります。
これまでご協力いただきありがとうございました。編集 3: 上記の form_for を更新しました。私は今2つの問題を抱えています:
フォームが IF ステートメント「if connection.blank?」を認識していません。2 番目の条件: データベースに接続が存在しない場合でも接続を編集します。
編集リンクをクリックすると、接続が存在しない場合でもルーティング エラーが発生します: ルートが一致しません {:controller=>"connections", :action="edit", :id=>nil}. 繰り返しますが、これはまだ接続が存在しないことが原因である可能性があります。この問題を修正する前に、#1 を修正する必要があるかもしれません。
PS: 私は喜んで解決策にお金を払います...私は完全に困惑しています! これまでお世話になったすべての方々に改めて感謝いたします。