2013-06-14 3 views
1

У меня возникли проблемы с пониманием того, как вы запускаете конкретное событие кнопки при использовании Ruby on Rails. Например, у меня есть мини-форма внутри стола, так (вид сбоку MVC):Кнопка события события

<%= form_tag do %> 
<% if student.floor_pref == '1st' %> 
    <td><%= select_tag 'room', options_for_select(@first_floor.map { |value| [value,value]}, @selected_room) %></td> 
<% end %> 
<% if student.floor_pref == '2nd' %> 
    <td><%= select_tag 'room', options_for_select(@second_floor.map { |value| [value,value]}, @selected_room) %></td> 
<% end %> 
<% if student.floor_pref == '3rd' %> 
    <td><%= select_tag 'room', options_for_select(@third_floor.map { |value| [value,value]}, @selected_room) %></td> 
<% end %> 

<td><%= submit_tag 'Update' %></td> 
<% end %> 

Как сказать контроллер, что, когда кнопка Update нажата внутри целей, например, выполнить этот код:

a = Student.find(3) 

a.room_number = '2105' 
a.save 

ответ

2

Ваша кнопка должна запускать обратную связь с сервером. Вам нужно определить действие в вашем контроллере, маршрут для достижения этого действия и установить атрибут формы action этому маршруту. Затем ваши действия могут обновлять модели и отвечать с успехом или сообщение об ошибке.

+0

Можете ли вы показать мне, как это делается с использованием этого примера? Я новичок в Ruby и спросил об этом раньше, но никто не может помочь. – Nick

+0

Какая часть? Я дал вам три шага: определите действие в контроллере, создайте маршрут, обновите тег '

', чтобы включить атрибут 'action =" ... "' для достижения вашего маршрута. Это * чрезвычайно * базовое кодирование Rails, и буквально каждый написанный урок расскажет вам, как это сделать. – meagar

+0

Все три части действительно. Я использовал строительные леса для создания своего MVC и, кроме того, просто объявляя переменные, которые запускают запрос и возвращают результаты внутри контроллера, я действительно не понимаю много за этим. Я прошел пару учебных пособий, и все они показывают то же самое, что на самом деле мне не помогает. – Nick

2

u должен указать маршрут (действие контроллера, которому должны отправляться данные) в теге формы. см. http://apidock.com/rails/ActionView/Helpers/FormTagHelper/form_tag для более подробной информации. принимая во внимание, что ур действие для «редактирования» действий со стороны студентов контроллера и что данные должны быть размещены на «обновление», представление может быть определена как

<%= form_tag student_path(@student), :method => :put do %> 
    ... 
    <$= submit_tag 'Update' %> 

и в методе «обновление», и можно записать код для обновления ученика с полученными параметрами. Я думаю, вам нужно изучить основные функции рельсов, так как это сэкономит время в будущем. u может ссылаться http://guides.rubyonrails.org/getting_started.html Кроме того, предпочитайте использовать form_for, а не form_tag.

+0

Спасибо за быстрый ответ. В теге формы я могу указать его как: <% = form_tag: controller => 'students',: action => 'update' do%>? Единственная причина, по которой я спрашиваю об этом, - это то, что я все еще изучаю синтаксис Ruby, и это имеет больше смысла для меня. Еще раз спасибо. – Nick

+0

да. ознакомьтесь с http://stackoverflow.com/questions/9540291/difference-between-form-for-and-form-tag для разницы между form_for и form_tag. –

+0

Сладкий, это меня достало. Благодаря! Теперь данные обновляются, но действие, которое я вызываю в контроллере, как показано выше, «обновление», не имеет представления, поэтому, когда я нажимаю кнопку обновления, он фактически обновляет столбец комнаты, но после этого отображает страницу «Шаблон отсутствует» , Есть ли способ, которым я могу сказать это после того, как он выполнил действие «update», чтобы просто вернуться на страницу «index»? Еще раз спасибо! – Nick

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