2016-01-11 7 views
0

Я пытаюсь обновить атрибут вложенного ресурса с помощью кнопки, но не могу заставить его работать. Запросы - это вложенный ресурс Gigs. Пользователь может видеть список всех запросов для своего конкретного концерта, с кнопкой после каждого для «найма» и «отклонения».Кнопка для обновления атрибута вложенного ресурса

Ближайший я пришел с;

<%= form_for ([@gig, @gig.requests.build]) do |h| %> 
    <%= h.hidden_field :status, value: "hired" %> 
    <%= h.submit "Hire", class: "btn" %> 
<% end %> 

Поскольку у меня есть .build дублируется «запрос» с правильным статусом, но оригинал остается нетронутым. Я пробовал использовать .update и .patch, но они не работают, и поскольку я не могу найти список переменных, любые дальнейшие попытки были бы бесполезны.

Я также пробовал метод link_to, например.

link_to("Hire", gig_requests_path(@request, :status => "hired"), :method => :put, :confirm => "Are you sure?") 

, который дает ошибку маршрута.

У меня, похоже, самый близкий метод формы, хотя я предполагаю, что метод ссылки не работает, поскольку я, вероятно, запутался из-за того, что ресурс вложен. Любые разъяснения будут очень признательны!

Только в случае, если:

def update 
    @request = Request.find(params[:id]) 
     if @request.update(request_params) 
     redirect_to gig_path(@gig) 
    else 
     render 'edit' 
    end 
end 

private 

def request_params 
    params.require(:request).permit(:message, :gig_id, :status) 
end 

Маршруты:

resources :gigs do 
     resources :requests 
end 
+0

Вы можете столкнуться с проблемами при помощи 'request' в качестве модели или переменной. Для моделирования веб-запросов используется объект запроса: http://api.rubyonrails.org/classes/ActionDispatch/Request.html –

ответ

0

В конце концов, я сделал это как так:

маршрутов:

resources :requests 
     post 'request/:id/hired' => 'requests#hired', as: :hired_request 
     get 'hired' 

контроллер:

def hired 
    @request = Request.find(params[:id]) 
     @request.update(status: "hired") 
     @request.save 
     redirect_to gig_requests_path 
     flash[:notice] = "MARKED AS HIRED" 
end 

и вид:

<td> 
<%= button_to "Hire user", { action: "hired", id: request.id }, 
           method: :post, data: { confirm: "Are you sure?" } %> 
</td> 
Смежные вопросы