2015-04-05 3 views
0

У меня есть контроллер с именем Welcome with view, называемый индексом.Сохранение значения пользовательского ввода в контроллере

В моем индексном представлении я создал небольшую форму как таковую.

<%= form_for :location do |f| %> 

    <%= f.label :Longitude %><br> 

    <%= f.text_field :integer %> 
    <br> 
    <br> 
    <%= f.label :Latitude %><br> 
    <%= f.text_field :integer %> 


    <p> 
    <%= f.submit %> 
    </p> 
<% end %> 

В этом виде пользователь может ввести целое значение для долготы и широты. Как только пользователь вводит значение для долготы и широты. Нажмите кнопку «Отправить». После отправки я хотел бы сохранить эти значения в моем контроллере. Поэтому я использую следующий метод, когда у меня есть две переменные экземпляра, принимающие значения из формы.

def index 
    @long = params[:longitude] 
    @lat = params[:latitude] 
    end 

В моей routes.rb меня

get 'welcome/index' 
    post 'welcome/index' 

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

ответ

1

Причина это не работает, потому что ваши поля и названы :integer, и так они имеют одно и то же имя, браузер отправляет только одно значение.

Так, с кодом, если вы заполнили в первом поле с «а», а второй с «Ъ», ваш PARAMS будет содержать что-то вроде этого:

{ location: { integer: "aaa" } } 

который, очевидно, не то, что вы хотите! Если ваш HTML выглядел так (я раздел макет вещь, чтобы сделать вещи более четкие):

<%= form_for :location do |f| %> 
    <%= f.label :longitude %> 
    <%= f.text_field :longitude %> 

    <%= f.label :latitude %> 
    <%= f.text_field :latitude %> 

    <%= f.submit %> 
<% end %> 

Тогда вы могли бы получить доступ к Params в контроллере params[:location][:longitude] и params[:location][:latitude]

Хорошей идею, чтобы увидеть разница между эффектом вашей формы и этой формой заключалась бы в проверке html. Посмотрите на атрибуты имени input и label на атрибуты и посмотрите, как они совпадают с параметрами Rails. Кроме того, когда вы публикуете форму, обязательно загляните в свой серверный журнал, чтобы увидеть параметры! :)

+0

А вы правы, я сделал ошибку, там хорошо, что имеет большой смысл, но после внесения предложенных изменений я пошел к моему контроллеру и сделал это @long = params [: location] [: longitude], я получил ошибку говоря undefined method '[] 'для nil: NilClass – user1010101

+0

@Learner проверяет ваш html, чтобы узнать, что такое имена полей, а затем загляните в журнал сервера rails - он отобразит параметры почтового запроса. – idlefingers

+0

, кажется, указывает, что «NoMethodError (неопределенный метод' [] 'для nil: NilClass): app/controllers/welcome_controller.rb: 4: in 'index'" – user1010101

2

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

Например, генерировать модель геолокация, связанных с контроллером и видом на это:

rails g scaffold GeoLocation longitude:string latitude:string 

Теперь запустите сервер Рельсы и просматривать http://localhost:3000/geo_locations/new и сохранить ваши длинные, лат. Я написал этот ответ, чтобы дать вам несколько советов.

Вы можете следить за эти прекрасные книги:

  • Книга Руби
  • рельсами 4 Way
+0

Привет, Спасибо за ваш комментарий, я изучил, как создавать модели и создавать ассоциации между таблицами, а также другие темы, такие как области именования. Так что эта часть мне понятна.Я очень смущаюсь, когда дело касается взгляда и контроллера, как в передаче информации между ними. Я постараюсь взглянуть на эшафот, как вы сейчас сказали. я также был бы признателен, если бы вы могли предоставить ввод для вышеуказанного кода, который я опубликовал. Большое спасибо – user1010101