我有一个带有 Users 表和 Connections 表的应用程序(将连接视为朋友;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 %>
但是,单击上面的编辑链接会显示此错误:
ConnectionsController#edit 中的 ActiveRecord::RecordNotFound 找不到 id=2 [WHERE "connections"."user_id" = 1] 的连接
似乎它使用显示页面上的 user_id(在上面的示例中,我正在查看 user_id 2)作为连接表中的 connection_id。如何将其更改为正确的 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
如何让编辑和创建链接使用正确的 connection_id 而不是 user_id?
另外,我注意到的另一个问题是应用程序绕过了 if 语句中的第一个条件。即使没有@connection,它也会跳到假设存在连接的条件。
非常感谢您的时间。我真的被困在这里了。谢谢!
编辑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 配置文件,但现在不存在任何连接(只是进行了本地清除),所以我的视图应该显示指向创建路径的链接(新发现的问题)。无论如何,它似乎仍然使用 user_id 代替 connection_id。即使连接已经存在,它也应该使用 id = 1 而不是 2 来编辑 Connection。
感谢大家到目前为止的帮助。编辑 3:我更新了上面的 form_for。我现在有两个问题:
表单无法识别 IF 语句“if connection.blank?” 并且将进入第二个条件:即使数据库中不存在连接,也要编辑连接。
当我点击编辑链接时,即使连接不存在,我也会收到路由错误:没有路由匹配 {:controller=>"connections", :action=>"edit", :id=>nil}。同样,这可能是因为尚不存在连接。在修复此问题之前,我可能需要修复 #1。
PS:我愿意为解决方案付费……我完全被难住了!再次感谢迄今为止提供帮助的所有人。