Быстрый вопрос. Вот мой код:Rails - неопределенный метод `name 'для nil: NilClass
#routes
map.resources :customers, :has_many => [:addresses, :matchings]
map.connect ":controller/:action/:id"
#url path:
http://127.0.0.1:3000/customers/index/3
#customers controller
def index
@customer = Customer.find(params[:id])
end
#customers view/index.html.erb
...
<%= @customer.name %>
...
Ошибка: неопределенный метод `имя 'для nil: NilClass.
Вот мои рассуждения. Параметр: id поступает с моего URL-адреса (т. Е. Мы ищем клиента № 3 по указанному выше пути). @customer должен легко найти этот массив, а затем @ customer.name должен указать имя, но, видимо, @customer пуст. Зачем?
Я предполагаю, что проблема заключается в том, что я не создаю массив в контроллере?
------ ОБНОВЛЕНИЕ ------
Привет Ларри, большое спасибо за комментарии.
Что я имею в виду под «индексом» на самом деле является домашней страницей, на которую попадают клиенты, когда они заходят на сайт. (У меня также есть отдельные логины для других пользователей, таких как работодатели, и они идут на свой собственный индекс). В настоящее время я использую «список» в качестве списка клиентов и «шоу» для одного человека ... есть ли лучший способ?
Второе и самое важное: журналы не дают мне ответа на фундаментальную проблему, которая заключается в невозможности отображения страницы.
Processing CustomersController#index (for 127.0.0.1 at 2010-05-16 16:56:19) [GET]
Parameters: {"action"=>"index", "id"=>"10", "controller"=>"customers"}
...
[4;36;1mCustomer Load (2.0ms)[0m [0;1mSELECT * FROM "customers" WHERE ("customers"."id" = 10) [0m
[4;35;1mMatching Load (24.0ms)[0m [0mSELECT * FROM "matchings" WHERE ("matchings".customer_id = 10) [0m
Completed in 153ms (View: 18, DB: 26) | 200 OK [http://127.0.0.1/customers/index/10]
------ ОБНОВЛЕНИЕ # 2 (последний!) ------
Я прочитал все ваши комментарии, и они помогли мне не только добиться прогресса в моей проблемы, но и узнать больше о том, как штуки подходят друг к другу. Для этого спасибо всем.
Алекс прав - мои маршруты не выстраиваются, как им нужно. Я создал новое действие в моем контроллере клиентов Home. Это базовая база клиента при входе в систему (она не отображает информацию об одном клиенте, поэтому, вероятно, ее не следует показывать, и это не список, поэтому не должен быть индексом или списком).
Rake routes # ...gives me a list of routes that does NOT include home. Why?
Во-вторых, если маршрут отображается имеет, например:
:action => "home"
/customers # (instead of what I need, '/customers/:id')
, что я должен сделать, чтобы изменить этот маршрут, чтобы принять: идентификатор?
Даже если «показ» вообще не показывает информацию о клиенте? Моя домашняя страница для клиента фактически отображает информацию о связанной модели, Matching. Эта модель должна «показывать» информацию как клиентам (на их целевой странице), так и работодателям (на целевой странице). Отображаемая информация отличается от каждой стороны, и каждая целевая страница показывает информацию о другой. (Заказчик: has_many: работодатели,: через =>: сопоставления). Так что я должен делать «showcustomer» и «showemployer» в соответствующем контроллере? – sscirrus
@sscirrus: если вам нужно * показать действие, чтобы показать данные пользователя на другой странице, тогда обязательно используйте его для этого. В этом случае вы можете ввести дополнительное действие в пользовательском контроллере под названием «сопоставления» и использовать его для показа целевой страницы (URL будет/clients/3/matchings). В качестве альтернативы вы можете сопоставить вложенные ресурсы клиентам, которые направят один и тот же URL-адрес на действие индекса в контроллере Matchings, но я не уверен, что это возможно, если у вас есть отношение «многие ко многим» (т.е. соответствия должны быть вложенным ресурсом как у клиентов, так и у работодателей). –