Добавление действия к существующему контроллеру (Ruby on Rails)

Примечание: Преобразование в строковое преобразование

Это происходит просто, если вы пытаетесь рассматривать массив как строку:

$arr = array('foo', 'bar');

echo $arr;  // Notice: Array to string conversion
$str = 'Something, ' . $arr;  // Notice: Array to string conversion

Массив не может быть просто echo 'd или конкатенируется с строкой, потому что результат не определен. PHP будет использовать строку «Array» вместо массива и вызвать уведомление, чтобы указать, что это, вероятно, не то, что было предназначено, и что вы должны проверять свой код здесь. Вероятно, вы захотите что-то вроде этого:

echo $arr[0];  // displays foo
$str = 'Something ' . join(', ', $arr); //displays Something, foo, bar

Или зациклируйте массив:

foreach($arr as $key => $value) {
    echo "array $key = $value";
    // displays first: array 0 = foo
    // displays next:  array 1 = bar
}

Если это уведомление появляется где-то, чего вы не ожидаете, это означает переменную, которую вы мысль - это строка, на самом деле это массив. Это означает, что у вас есть ошибка в коде, которая делает эту переменную массивом вместо ожидаемой строки.

36
задан tereško 23 August 2014 в 13:28
поделиться

4 ответа

Ваша маршрутизация не настраивается для разрешения того маршрута. Принятие Вы используете леса по умолчанию, помещает эту строку прежде map.resources :posts строка в config/routes.rb:

map.connect "posts/:action", :controller => 'posts', :action => /[a-z]+/i

regex для :action ограничивает его просто a-z (чтобы не ловить вещи как/posts/1). Это может быть улучшено при необходимости в подчеркиваниях или числах в новых действиях.

26
ответ дан zenazn 27 November 2019 в 05:15
поделиться

Ошибка, которую Вы совершаете, является на самом деле довольно общей.

В основном, направляющие автоматически отображают URL для Ваших лесов. Таким образом, когда Вы создали леса Сообщений, направляющие отображает маршруты URL для него. Одним таким маршрутом является URL для просмотра единственного сообщения: / отправляет / (post_id)

Так, при вводе URL/posts/start, направляющие думает, что Вы говорите "Эй, даете мне, сообщение с идентификатором = запускается. Так направляющие жалуется, что выставочный метод не может найти сообщение с таким идентификатором.

Один быстрый способ зафиксировать это должно удостовериться, что Ваш config/routes.rb имеет маршрут для действия запуска перед маршрутами лесов:

# Route for start action
map.connect '/posts/start', :controller => 'posts', :action => 'start'
# Default mapping of routes for the scaffold
map.resources :posts

Так или иначе, надейтесь, что это помогает.

45
ответ дан David 27 November 2019 в 05:15
поделиться

Я нашел решение моей проблемы в файле routes.rb, где

map.resource :post

я добавил с аргументом коллекции, поэтому он остался таким:

map.resource :post, :collection => { :my_action => :get}
0
ответ дан 27 November 2019 в 05:15
поделиться

Это работает:

map.resource :post, :collection => { :my_action => :get}
1
ответ дан 27 November 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: