Разбиране на url частта на link_to, съдържа име на колона и стойност

Моля, обяснете ми URL частта на този link_to.

url част

admin_user_path(user,{ user: { admin: !user.admin? } })

пълен link_to

<%= link_to "#{ user.admin? }", admin_user_path(user,
  { user: { admin: !user.admin? } }),
  method: :patch,
  class: "admin #{ user.admin ? 'btn-warning' : 'btn-info' } " 
%>

това е html

<a class="admin btn-warning " data-method="patch" href="/bg/admin/users/2?
user%5Badmin%5D=false" rel="nofollow">true</a>

admin_user_path генерира admin/user/

admin_user_path(user) генерира admin/user/:id

admin_user_path(user, options) i Мисля, че опцията съдържа стойност, която е достъпна в контролера чрез параметрите? С тази стойност мога да го запазя за запис с id на :id.

Сори, все още съм нов в релсите и искам да разбера частта с опциите. знам, това е магията на релсите, но може би има малко повече обяснение :)


person AdvanceInBeginning    schedule 02.10.2014    source източник


Отговори (1)


Проверих в Rails Guide, 2.9 Създаване на пътища и URL адреси от обекти : "В допълнение към използването на помощните средства за маршрутизиране, Rails може също да създава пътища и URL адреси от масив от параметри."

Например:

<%= link_to 'Ad details', magazine_ad_path(@magazine, @ad) %>

link_to Документация за API

В твоя случай

admin_user_path(user,{ user: { admin: !user.admin? } })

частта с опции създава булева стойност, която е достъпна, както казахте в контролера чрез параметри. Освен това във вашия случай бих препоръчал да проверите във вашия контролер дали потребителят всъщност е администратор, който има достъп до този път (проверка за оторизация).

person jyrkim    schedule 02.10.2014
comment
Благодаря за отговора. Административните страници (контролер) имат before_action: authorize проверка. Достатъчно ли е или трябва да проверя за администратор, преди записът да бъде променен? Всъщност изпращам това като потребител без администратор http://localhost:3000/admin/users/1?user%5Badmin%5D=true и то не се е променило. имам късмет :) - person AdvanceInBeginning; 02.10.2014
comment
@AdvanceInBeginning, звучи, че вашият контролер работи добре, ако не се актуализира, когато потребител, който не е администратор, се опитва да актуализира стойност; така че мисля, че там вече имате някакъв вид проверка за оторизация с филтъра before_action: authorize. Освен това мисля, че вашият код е доста подобен на администраторската проверка, намерена в учебната книга на Ruby on Rails (имам предвид, че и двата контролера използват филтър за проверка на администраторските потребители) railstutorial.org/book/ - person jyrkim; 02.10.2014