Как сделать, чтобы выпадающее меню отражало то, что хранится в соответствующем столбце БД в ruby ​​на рельсах? - PullRequest
0 голосов
/ 09 января 2012

Как сделать, чтобы раскрывающееся меню отражало то, что хранится в соответствующем столбце в базе данных?

У меня есть раскрывающееся меню для выбора пола, и оно прекрасно обновляет базу данных, но при выборе выбирает вариант по умолчанию.меню при обновлении, где все мои текстовые поля отлично вытягивают данные из базы данных.

<%= form_for @profile, :remote => true,  do |f| %>
Username: <%= @profile.user.username %><br />
URL: http://site.com/<%= @profile.user.username %><br />
First Name: <%= f.text_field :first_name,   %><br />
Last Name: <%= f.text_field :last_name,  %><br />
I am: <%= f.select :gender, options_for_select([['Select Gender', ''],['Male','m'],['Female','f']]) %><br />
<%= f.submit 'update' %><br />
<% end %>

Любая подсказка, что мне не хватает?С уважением

Вот моя модель:

class Profile < ActiveRecord::Base

  belongs_to :user

   attr_accessible :first_name, :last_name, :gender, :motd

  # Local Variables
  # Regex Variables
  email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  alpha_regex = /^[a-zA-Z]*$/
  alpha_numeric_regix = /^[a-zA-Z0-9_]*$/


    #Form Validation
    validates :first_name,    :presence      => true,
                              :length        => { :minimum => 2, :maximum => 15 },
                              :format        => {
                                                  :with => alpha_regex,
                                                  :message => "Your first name must contain letters only"
                                                }

    validates :last_name,     :presence      => true,
                              :length        => { :minimum => 2, :maximum => 15 },
                              :format        => {  
                                                  :with => alpha_regex,
                                                  :message => "Your last name must contain letters only"
                                                }

    validates :gender,        :presence      => true,
                              :inclusion     => { 
                                                  :in => %w( m f ), :message => "Are you male or female?"
                                                }


end

Метод обновления с контроллера

 def update

   respond_to do |format|

     if @profile.update_attributes(params[:profile])

       format.js   { render :js => "window.location = '#{settings_edit_profile_path}'" } 
       flash[:success] = "Profile updated" 
     else
      format.js   { render :form_errors }

    end
  end
end

1 Ответ

1 голос
/ 09 января 2012

options_for_select имеет специальный синтаксис для выбора значения:

<%= f.select :gender, options_for_select([['Select Gender', ''],['Male','m'],['Female','f']], "#{@profile.gender}") %>

может работать как вы ожидаете.

Или вы можете создать модель Gender и использовать collection_select, которая делает это по умолчанию:

<%= f.collection_select :gender, Gender.all, :value, :description, :prompt => true %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...