2013-07-25 1 views
0

В моем приложении rails у меня есть действие (def do_some_stuff), но я бы сначала хотел обновить сообщение, прежде чем делать это &, если он будет успешным, делать вещи "... Простой, не так ли?Rails: Как вы называете «обновление» из другого действия?

Вот мое действие

def do_some_stuff 
    Rails.logger.debug "Post id is #{@post.id}" 
    update #calls the update action 
    ## does some stuff 
end 

Вместо обновления, Rails бросает мне эту ошибку: «Параметр Обязательный отсутствует: пост» (что означает «пост» равна нулю, верно?)

Я получение идентификатора сообщения в моем журнале, но по какой-то причине он дает мне эту ошибку.

Чтобы сделать вещи проще, я решил просто попытаться вызвать действие обновления в «do_some_stuff» действие .. Я использую strong_params кстати

Как я называю «обновить» действие от другого действия?

Заранее спасибо. Любая помощь будет принята с благодарностью.


Я напечатал это на мой телефон так жаль заранее за любые опечатки


мой журнал: Обработка PostsController # do_some_stuff как HTML Параметры: ID = 149

+0

Просто совет для использования в будущем SO, если вы когда-либо отправляете сообщение об ошибке (т. Е. 'Required parameter missing: post'), размещайте всю ошибку и, по крайней мере, первые несколько строк трассировки стека, иначе это практически бессмысленно. Трассировка стека показывает, где возникает ошибка. –

+0

@Mike, который буквально является ошибкой. Это пустая белая страница с этой строкой. – goo

+0

hmpf, должно быть ошибкой рельсов 4 или что-то делать с сильными параметрами, о которых я не знаю. В любом случае, я был бы удивлен, если бы журналы не предоставили более полную ошибку. –

ответ

2

вы не должны Нельзя называть одно действие другим. Вместо этого, просто позвоните update_attributes на сообщение:

def do_some_stuff 
    if @post.update_attributes(params[:post]) 
    ## do some stuff 
    end 
end 

В случае успеха, update_attributes возвращает истину, и «делать некоторые вещи» блок будет выполнен.

Предполагается, что у вас уже есть @post. Обычно, вы получите это в блоке или методе before_filter с поиском: @post = Post.find(params[:id]).

+0

Правда, но это все. Я попробовал это, и я все равно получаю тот же результат.Пустая белая страница, которая читает ту же ошибку, что и в моем вопросе. – goo

+0

Извините, обновил мой ответ. Вы должны сначала получить сообщение каким-то образом, возможно, найдя его. –

+0

У вас есть 'params.require (: post)' где-нибудь? –

Смежные вопросы