я получаю следующее сообщение об ошибке на странице, которая содержит ссылку на кредит/изменить объект:маршрутизация ошибки Нет маршрут не соответствует ID нолю (Rails)
маршрутизация Ошибка Нет маршрут спичек {: контроллер => «connections»,: action => «edit»,: id => nil}
Мое приложение имеет страницы профиля пользователя (#show action в users_controller.rb) со ссылкой для создания или редактирования существующего «соединения», (отношения между пользователями, такими как Facebook или LinkedIn). Если соединение не существует, ссылка отправит пользователю создать новое соединение. Если соединение уже существует, ссылка отправит пользователю отредактировать существующее соединение. Моя функциональность создания отлично работает. Однако, как только соединение было создано, посещение страницы пользователя вызывает ошибку маршрутизации. Мне явно не нравится моя ссылка для действия редактирования.
Вот link_to на странице пользователя:
<% unless current_user == @user %>
<% if @contact.present? %>
<%= @user.first_name %> is your <%= @connection.description %> (<%= link_to "edit contact", { :controller => 'connections', :action => 'edit', :id => @connection.id} %>)
<% else %>
How do you know <%= @user.first_name %>? (<%= link_to "edit contact", { :controller => 'connections', :action => 'create', :user_id => @user.id }, :method => 'post' %>)
<% end %>
Ошибка также конкретно указывается, что: идентификатор установлен в ноль (NULL). Проблема должна быть здесь. Как мое приложение может ссылаться на правильное соединение? Моя переменная экземпляра должна была сделать трюк.
Вот контроллер соединения:
class ConnectionsController < ApplicationController
def index
end
def update
@connection = current_user.connections.find(params[:id])
if @connection.update_attributes(params[:connection])
flash[:notice] = "Contact relationship updated"
render 'activities'
end
end
def edit
@connection = current_user.connections.find(params[:id])
end
def create
#@user = User.find(params[:user_id])
@connection = current_user.connections.build(params[:connection])
@user = User.find(params[:user_id])
if @connection.save
flash[:success] = "Contact relationship saved!"
else
render @user
end
end
end
А вот контроллер Пользователь показать действие (где link_to существует):
def show
@user = User.find(params[:id])
@connection = current_user.connections.build(:otheruser_id => @user)
@contact = current_user.connections.where(user_id: current_user, otheruser_id: @user)
end
routes.rb:
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
Любые идеи о том, как исправить ссылку_to? Благодаря!
EDIT 1: соответствующие рейк маршруты:
connections GET /connections(.:format) connections#index
POST /connections(.:format) connections#create
new_connection GET /connections/new(.:format) connections#new
edit_connection GET /connections/:id/edit(.:format) connections#edit
connection GET /connections/:id(.:format) connections#show
PUT /connections/:id(.:format) connections#update
DELETE /connections/:id(.:format) connections#destroy
Вы пробовали «рейк-маршруты» в консоли, чтобы проверить маршрут? – kasperite
Привет и спасибо за ответ. Я только что разместил маршруты рейка выше. Похоже, он должен работать – winston