2015-03-13 6 views
1

У меня есть ERB файл в tencet-регулятораметод вызова от Еврорадио рельсов

<td><%= link_to "OK", post_path(post.id), method: :suit %></td> 

и контроллер почт

helper_method :suit 

def suit 
@post.suit = true 

end 

и маршруты

resources :posts 

И я получаю эту ошибку «Нет маршрут соответствует [POST] "/ posts/77" "

Как можно Я чиню это?

Как пройти спор?

<%= link_to "OK", suit_post_path(post), method: :put %> 

Я хочу, чтобы передать объект пост и получить контроллер

def suit 

    @post = params[:post] 

    @post.suit = true 

    if @post.save 
    redirect_to tencet_show_path 
    end 

end 
+0

Вы должны объявить метод 'suit' как набор' post'-контроллера. – Emu

+0

Это не так просто, к сожалению. Вы должны определить новые действия на контроллере, создать новый маршрут для этого действия и создать ссылку на этот маршрут. 'method' внутри ссылки служит для определения HTTP-глагола, который будет использоваться с запросом. – BroiSatse

+0

Можете ли вы это описать? – tencet

ответ

2

Предполагая, что вы обновляете post.suit ...

Вы должны определить костюм маршрут в вас конфиг/routes.rb:

resources :posts do 
    put :suit, on: :member 
end 

Кроме того, вы не можете иметь метод be: костюм. Он должен быть один из способов, как пост, говоря, получить, и т.д ...

Таким образом, в вашем .erb, вы бы:

<td><%= link_to "OK", suit_post_path(post.id), method: :put %></td> 

В: Контроллер илит

def suit 
    @post.suit = true 

    if @post.save 
    redirect_to your_desired_path 
    else 
    render :previous_controller_action 
    end 
end 
+0

Спасибо, его работы, но как я могу передать аргумент методу? – tencet

+0

Объект класса – tencet

+0

Можете ли вы привести мне пример того, что вы хотели бы пройти? –

0

So пару вещей. Во-первых, определить новый маршрут:

resources :posts do 
    post :suit, on: :member 
end 

Ваш метод suit уже на месте (Тем не менее, я понятия не имею, что он должен делать - от кода, я бы ожидать, что возбудит исключение). Обратите внимание, что это не helper_method.

Затем обновите ссылку:

<td><%= link_to "OK", suit_post_path(post), method: :post %></td> 

Я ожидаю, что вы будете получать TemplateMissing исключение на данном этапе. Если вы просто хотите обновить свой пост, а затем изменить suit действие на:

def suit 
    @post.update_attributes(suit: true) 
    redirect :back 
end 

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

+0

Он не работает «Нет совпадений в маршруте [POST]»/posts/77/suit »« – tencet

+0

@ user3908457 - У вас есть для перезапуска сервера после изменения маршрутов. – BroiSatse

0

Метод в этом случае относится не к методу контроллера, а к методу HTTP. Это также то, что взрывает ваш маршрут.

Создание пользовательских действий

def toggle_suit 
    @post.suit = true 
    render :show 
end 

и обновить ваши маршруты

routes :posts do 
    post '/suits' => 'posts#toggle_suits', as: :toggle_suit 
end 

наконец обновить эрб

<%= link_to '...', toggle_suit_url(post: post), method: :post %> 

отнимать здесь является то, что method: :suit не делать то, что вы думаете оно делает. Он вызывает ссылку для создания невидимой формы, где ссылка является кнопкой отправки, позволяющей ей отправлять POST вашему приложению.

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