0

ユーザー テーブルと接続テーブルを持つアプリがあります (接続を友人と考えてください。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つの問題を抱えています:

  1. フォームが IF ステートメント「if connection.blank?」を認識していません。2 番目の条件: データベースに接続が存在しない場合でも接続を編集します。

  2. 編集リンクをクリックすると、接続が存在しない場合でもルーティング エラーが発生します: ルートが一致しません {:controller=>"connections", :action="edit", :id=>nil}. 繰り返しますが、これはまだ接続が存在しないことが原因である可能性があります。この問題を修正する前に、#1 を修正する必要があるかもしれません。

PS: 私は喜んで解決策にお金を払います...私は完全に困惑しています! これまでお世話になったすべての方々に改めて感謝いたします。

4

2 に答える 2

1
However, clicking on the edit link above shows this error:

ActiveRecord::RecordNotFound in ConnectionsController#edit Couldn't find Connection with id=2 [WHERE "connections"."user_id" = 1]

編集リンクが機能しない理由は、IDを渡していないためです。

<%= @user.first_name %> is your <%= @connection.description %> (<%= link_to "edit contact", { :controller => 'connections', :action => 'edit', id => @user.id } %> )
于 2013-06-25T11:32:48.353 に答える