Как выбрать имена столбцов таблицы в представлении и передать на контроллер в рельсы? - PullRequest
1 голос
/ 20 марта 2012

Итак, я новичок в Rails и программировании ОО в целом.Я немного разбираюсь в архитектуре MVC.Моя цель - создать (почти) полностью динамический веб-сервер для построения графиков.Я довольно запутался с параметрами, формами и выбранными помощниками.

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

Для простоты, скажем, моя схема базы данных выглядит следующим образом:

                 --------------Plot---------------

                 |____x____|____y1____|____y2____|
                 |    1    |    1     |    1     |
                 |    2    |    2     |    4     |
                 |    3    |    3     |    9     | 
                 |    4    |    4     |    16    | 
                 |    5    |    5     |    25    | 
                 ...

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

class Plot < ActiveRecord::Base
scope :select_var, lambda {|varname| select(varname)}
scope :between_x, lambda {|x1,x2| where("x BETWEEN ? and ?","#{x1}","#{x2}")}

Таким образом, я могу позвонить:

irb>>@p1 = Plot.select_var(['x','y1']).between_x(1,3)

и получить взамен класс, где @ p1.x и @ p1.y1 - мои единственные атрибуты, толькодля значений от x = 1 до x = 4, которые я динамически строю.

Я хочу начать с представления (plot / index), где я могу динамически выбирать, какие имена переменных (имена столбцов таблицы), а также какие строки из базы данных для выборки и построения.Проблема в том, что большинство избранных помощников, кажется, не работают со столбцами в базе данных, а только со строками.

Итак, чтобы выбрать столбцы, я сначала получаю массив имен столбцов, которые существуют в моей базе данных, с помощью функции Iписал.

Plots Controller
def index
  d=Plot.first
  @tags = d.list_vars
end

Итак @tags = ['x', 'y1', 'y2']

Затем в моем plot / index.html.erb я пытаюсь использовать каплювниз, чтобы выбрать, какие переменные я отправляю обратно в контроллер.

index.html.erb
<%= select_tag( :variable,     options_for_select(@plots.first.list_vars,:name,:multiple=>:true) )%>
<%= button_to 'Plot now!', :controller =>"plots/plot_vars", :variable => params[:variable]%>

Наконец, снова в контроллере

Plots controller
...
def plot_vars
  @plot_data=Plot.select_vars([params[:variable]])
end

Проблема в том, что каждый раз, когда я пробую это (или один из ста его вариантов), params [: variable] равен nill.

Как я могу использовать раскрывающийся список для передачи параметра с именами строковых переменных в контроллер?

Извините, это так долго, я боролся с этим уже около месяца.:-( Я думаю, что моя самая большая проблема в том, что эта настройка не совсем соответствует архитектуре Rails. У меня нет «пользователей» и «статей» в качестве отдельных объектов. У меня действительно есть структура данных, а не объект данных.я думаю, что работать со структурой в терминах объекта данных не обязательно проще всего.

Для фона: моя фактическая база данных имеет около 250 столбцов и пару миллионов строк, и они изменяются и модифицируются.время от времени. Я знаю, что могу сделать базу данных умнее, но с моей стороны это того не стоит. Я работаю в научном институте, где есть масса проектов с такими же базами данных. У каждого есть веб-разработчик, который тратитмесяцев, настраивающих веб-интерфейс и их собственные настройки для создания графиков. Я хочу сделать это полностью динамичным, так как решение plug-and-play, так что все, что вам нужно сделать, это указать соединение с базой данных, и эта установка rails будет автоматически отображаться и отображатьсякакие данные вы хотите в нем. Я больше последовательный программистномер числа, как и многие люди здесь.Я думаю, что этот проект мог бы быть очень полезным в конце, но его трудно понять для меня прямо сейчас.

...