Получить значение из статических рельсов select_tag - PullRequest
0 голосов
/ 04 мая 2018

Я только начал программировать с ruby ​​на рельсах. Мне действительно это нравится, но иногда это действительно сложно. Я пытаюсь получить выбранное значение из select_tag и передать его в модель, где я умножу это значение на другое (полученное из текстового поля from_for). Проблема в том, что я не смог понять, как получить значение из представления в контроллер, а затем в модель.

Вот мой код:

Вид:

<%= label_tag 'Remind' %>
<%= f.number_field :remind %>
<%= select_tag :select_conv, options_for_select([['Day', 1], ['Week', 7], ['Month', 30]]) %>

Контроллер:

def create
  add = Item.new(item_params)

  if add.save
    flash[:notice] = ''
    redirect_to items_path
  else
    redirect_to new_item_path
    flash[:error] = ''
  end

private
def item_params
params.require(:item).permit(:itemname, :amount, :bbf, :remind)
end
end

Модель:

def convert_to_d
  convert = self.remind * self.v_convertor
  self.assign_attributes(remind: convert)
end

Заранее спасибо

1 Ответ

0 голосов
/ 04 мая 2018

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

Просмотр:

<%= label_tag 'Remind' %>
<%= f.number_field :remind %>
<%= select_tag :select_conv, options_for_select([['Day', 1], ['Week', 7], ['Month', 30]]) %>

Из представления он вернет хеш со значениями ввода каждого пользователя. Итак, для этого примера он вернет:

params = { remind: user_input, select_conv: user_input }

Вы можете поймать это в вашем контроллере с помощью метода item_params, но Вы должны указать параметры, которые вы хотите в своем методе, поэтому ваш item_params должен быть:

Контроллер:

def create
  add = Item.new(item_params)

  if add.save
    flash[:notice] = ''
    redirect_to items_path
  else
    redirect_to new_item_path
    flash[:error] = ''
  end
end

private 
def item_params 
  params.require(:item).permit(:itemname, :amount, :bbf, :remind, :select_conv) # << update here 
end     

В вашей модели вы можете получить доступ к значениям, сохраненным в item_params, с их именами, как вы это сделали с self.remind , вы можете вызвать его с помощью self.select_conv .

Модель:

# self.select_conv can be used now.

def convert_to_d
  convert = self.remind * self.v_convertor
  self.assign_attributes(remind: convert)
end

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...