2013-04-27 2 views
0

Как я могу явно указать ключ и значение в хеше, а затем использовать их в списке? У меня есть модель Link, где внешние ссылки могут быть сохранены. Ссылка имеет название и URL. Я хочу использовать заголовок как ключ и url как значение.Явным образом задайте ключ и значение для выбора

--------------------- ОБНОВЛЕНИЕ ------------------------ -

Эта работа ..

links = Link.all 

link_array = [] 

links.each do |link| 
    link_array << [link.title,link.url] 
end 

Но, теперь вот это устройство. Я хочу объединить этот массив с другим массивом, чтобы две модели могли быть выбраны из одной формы. Как это ...

a = PagesController.action_methods 
    # this grabs each action from the pages controller that will later be used as a route 

b = a.select {|s| s.include? "callback"} 
c = a - b 
    # b and c removes any position in the array that includes the word 'callback' so that only actions defined in the controller are returned 

links = Link.all 

link_array = [] 

links.each do |link| 
    link_array << [link.title,link.url] 
end 

@all_links = c + link_array 
    # desired result is an array used in a single form select containing both external links and internal links 

ответ

0

Это делает то, что я хочу. Может быть, есть лучший способ.

a = PagesController.action_methods 
b = a.select {|s| s.include? "callback"} 
c = a - b 
@c_array = [] 
c.each do |p| 
    @c_array << [p, "#{p}_path"] 
end 

links = Link.all 
@link_array = [] 
links.each do |link| 
    @link_array << [link.title, link.url] 
end 

@all_links = @c_array + @link_array 

Результаты в одном массиве, содержащем как внутренние маршруты (к действиям на странице), так и внешние ссылки на URL-адреса. Теперь, в третьей модели, я могу иметь строковый столбец под названием: pathto и хранить либо маршрут (как строку), либо url. Затем в помощнике сделайте следующее:

def send_route(pathto) 
     if pathto.include? "http" 
     pathto # just go to the url 
     else 
     self.send(pathto) # create a route from the string stored in the db .. i.e. "home_path" 
     end 
    end 
0

Я не совсем уверен, что вы собираетесь, но кажется, что вы ищете что-то вроде этого:

Link.where(title: url) 

... где URL-адрес является некоторой локальной переменной. Это приведет к выражению SQL-запроса, аналогичного следующему:

SELECT * FROM links WHERE title='yoururl' 
Смежные вопросы