Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby On Rails > form_for передача значения в контроллер


Автор: Carlos0N 25.8.2012, 00:16
Привет.
Подскажите, как решить следующую проблему.
Есть контроллер с методом main в котором я объявляю переменную @var=""
Далее я хочу присвоить ей значение из вьюхи. Как это сделать?
С объектом модели к примеру всё понятно и работает, но просто к переменной присвоить значения у меня не получается.
И еще, как установить, какой метод будет отрабатывать в контроллере при нажатии кнопки? 

К примеру у меня есть модель User и контроллер

Код

class UsersController < ApplicationController
  def new
    @user = User.new
  end
  
  def create
    @user = User.new(params[:user])
    if @user.save
      redirect_to #страница
    else
      render 'new'
    end
  end
end


и вьюха

Код

<h1>User</h1>
<%= form_for(@user) do |f| %>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="actions">
    <%= f.submit "Save" %>
  </div>
<% end %>


так вот тут я не могу понять, почему при нажатии на кнопку Save отрабатывает именно метод create? Где собственно указывается, что должен сработать именно create и как указать какой то другой метод?

Я совсем недавно начал разбираться с ror, так что сильно не ругайте.

Автор: Rikkit 25.8.2012, 08:50
Код

    <%= f.submit "Save", method: :delete %>

Автор: Carlos0N 25.8.2012, 20:06
Честно говоря, это проблемму не решило, да и вообще у меня не заработало. Может я что не так делаю конечно.
Я так и не понимаю, как передавать значения из представления в контроллер..
Я так понимаю, когда мы работаем с моделями, то у нас есть только действия CRUD, верно?
В данном случае мне просто надо передать текст из формы в представлении, в контроллер по нажатию кнопки. При этом я должен остаться на этой странице и не обновлять её? Как это сделать силами ror?

Наверное тут сумбур сплошной, но обратная связь контроллера и формы мне плохо понятна.

Автор: Rikkit 27.8.2012, 22:22
Насчет метода
Цитата
так вот тут я не могу понять, почему при нажатии на кнопку Save отрабатывает именно метод create?
В форму вы передаете объект, который еще не лежит в базе данных, соответственно form_for и решает, что нужно делать :create.

Не вижу вообще смысла париться с выбранным методом. Разве что при создании ссылки на удаление 
Код

<%= link_to 'Destroy', @user, method: :delete %>


Теперь насчет переменной @var
  • Через url
    Вводите url (в виде можете сделать это как ссылку) в браузер, вида /controller/action?var=foobar
    В экшне можете обращаться к данным так - params[:var] , а можете ввести @var = params[:var]
  • Через вид
    Создаете форму
    Код

    <form action = '/controller/action' method=post>
    <input name='var' /><input type=submit />
    </form>

    далее в экшене тот же params[:var]

Автор: Carlos0N 31.8.2012, 12:19
Rikkit, спасибо!
Когда задавал вопрос, ещё не до конца понимал принцыпы работы rails. Сейчас всё встаёт на свои места.
Если у кого-то возникнут такие же сложности с пониманием основ, то рекомендую курсы Rails For Zombies от http://www.codeschool.com/
Первый курс там бесплатный, второй нет, но в интеренете не проблема найти pdf со слайдами. Мне они достаточно сильно помогли. Ну и railscast конечно.

PS не считайте это рекламой, просто реально для начального уровня хороший материал.

Автор: source777 31.8.2012, 12:55
Почитайте ещё http://ruby.railstutorial.org/ruby-on-rails-tutorial-book или его слегка устаревший http://russian.railstutorial.org/chapters/beginning.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)