Установка хэша params для переменной внутри контроллера (rails) - PullRequest
0 голосов
/ 20 сентября 2011

Я очень плохо знаком с рельсами, и у меня есть довольно простой вопрос:

У меня есть форма, которая принимает массив:

<td><%= fields_for "days" do |form| %>
            M: <%= form.check_box "", {}, 'M', ''  %>
            T: <%= form.check_box "", {}, 'T', '' %>
            W: <%= form.check_box "", {}, 'W', '' %>
            Th: <%= form.check_box "", {}, 'Th', '' %>
            F: <%= form.check_box "", {}, 'F', '' %>
    <% end %>

Это должно быть доступно через params [:дней].Как я могу присвоить params [: days] переменной внутри контроллера?@days не правильно здесь, верно?(Там нет объекта Days, поэтому нет экземпляра этого объекта).Что должно идти в слоте [correct_variable] ниже?

[correct_variable] = params[:days] 

Спасибо!


В ответ на комментарии:

Я пытался использовать @days, но дляпо какой-то причине мне не позвонили бы туда, куда бы я хотел.В частности, я хотел бы передать это своей модели поиска:

class Search < ActiveRecord::Base
  attr_accessible :name, :day, :units, :instructor

  def courses
    @courses ||= find_courses
  end 

  private 

    def find_courses
      Course.find(:all, :conditions => conditions)
    end   

    def day_conditions
      ["courses.day LIKE ?", "%"+ @days.join("%")+"%"] 
    end

Сначала я создаю экземпляр @days в моем контроллере курсов (который подключается через метод индекса к частичному, в котором используется экземпляр).объекта поиска.


Дополнительный код:

Из курсов / index.html.erb:

<% if @search.save %>
    <div id = "results_scroll">
        <%= render :partial => 'searches/search_results' %>
    </div>
<% else %>

Из поискового запроса частично:

<% "Search" %>
<table>
    <tr>
        <th align="left" width="25%"><%= 'Name' %></th>
        <th align="left" width="10%"><%= 'Number' %></th>
        <th align="left" width="20%"><%= 'Instructor' %></th>
        <th align="left" width="10%"><%= 'Room' %></th>
        <th align="left" width="5%"><%=  'Day' %></th>
        <th align="left" width="5%"><%=  'Units' %></th>
        <th align="left" width="15%"><%=  'Time' %></th>
        <th align="left" width="10%"><%=  'Limitations' %></th>
    </tr>
<%= render :partial => @search_show.courses %>
</table>

Из контроллера курсов (в нем есть переменная @search_show).

  def index
    @courses = Course.order(sort_column + " " + sort_direction)
    @search = Search.new 
    @search_show = Search.last
    @title = "List"
    @days = params[:days]

Наконец, часть _course.html.erb:

<tr>
   <td><%= course.name %></td>
   <td><%= course.number %></td>
   <td><%= course.instructor %></td>
   <td><%= course.room %></td>
   <td><%= course.day %></td>
   <td><%= course.units %></td>
   <td><%= course.time %></td>
   <td><%= course.limitations %></td>
   <td><%= link_to 'Show', course %></td>
</tr>

Ответы [ 2 ]

0 голосов
/ 20 сентября 2011

Это не совсем ответ, но есть некоторые проблемы с тем, как вы пытаетесь получить доступ к переменной @days, которую вы установили в контроллере.

# your controller 
...
def index
  ...
  @days = params[:days]

# your model
...
private

def day_conditions
  ["courses.day LIKE ?", "%"+ @days.join("%")+"%"] 
end

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

Вы должны найти способ отправки @days с вашего контроллера в ваши модели вместо использования глобальных переменных.

0 голосов
/ 20 сентября 2011

Решил проблему, используя глобальную переменную $ days вместо @days.

...