Вызов метода из представления с использованием link_to_function - PullRequest
0 голосов
/ 22 апреля 2010

Я пытаюсь получить изображение, которое при нажатии связывает выбранную направляющую с проектом. Я использую link_to_function, которая несколько ведет себя, но я не могу получить метод, который я вызываю в link_to_function, для перенаправления на другую страницу Есть лучший способ сделать это? Ниже немного моего кода. Я могу вставить в дополнительные части, если это необходимо:

<% @guidelines.each do |guideline| %>
 <tr>
    <td align='center'><%= link_to_function image_tag("../../../images/icons/action_add.png"), add_guideline(guideline)  %></td>
          <td><%=h guideline.title %></td>

Мой метод GuidelinesController.helper выглядит следующим образом:

  def add_guideline(guideline)
           @project = Project.find(params[:project_id])
           @project.guidelines << guideline
           @project.save   

           redirect_to dashboard_path #doesn't work :(
    end

Ответы [ 3 ]

1 голос
/ 22 апреля 2010

Проблема

link_to_function для добавления Javascript к вашим ссылкам.

в вашем коде вызывается add_guideline, и его результат передается в качестве второго аргумента в ваш link_to_function вызов.


EDIT

Оформить заказ, как Добавить больше RESTful действий

Вы можете добавить это к config/routes.rb

# overwrite map.resources :projects
map.resources :projects, :member => {
  :add_guideline    => :get,
  :create_guideline => :post
}

Это добавит следующие маршруты

   add_guideline_project GET    /projects/:id/add_guideline(.:format)
create_guideline_project POST   /projects/:id/create_guideline(.:format)

По вашему мнению, вы можете использовать

<%= link_to(
  image_tag("/images/icons/action_add.png"),
  add_guideline_project_path(@project)
) %>

Это будет ссылка на ProjectsController#add_guideline.

Здесь вы можете сделать то, что пытались:

# app/controllers/projects_controller.rb
def add_guideline
  @project = Project.find(params[:id])

  # render app/views/projects/add_guideline.html.erb
  # create your form in this view
end

def create_guideline
  @project = Project.find(params[:project_id])
  @guideline = Guideline.find(params[:guideline_id])
  @project.guidelines << @guideline
  redirect_to dashboard_path
end
0 голосов
/ 22 апреля 2010

Я получил эту работу, используя

<%= link_to(image_tag("/images/icons/action_add.png"), add_guideline_to_project_path(@project, :guideline_id => guideline.id))  %></td>
    <td><%=h guideline.title %></td>

и этот метод:

  def add_guideline_to
    @project = Project.find(params[:id])
    @guideline = Guideline.find(params[:guideline_id])
    @project.guidelines << @guideline
    @project.save

    redirect_to @project
  end

Я также обновил свои маршруты, добавив:

map.resources :projects, :member => {
  :add_guideline    => :get,
  :create_guideline => :post
}

Спасибо всем!

0 голосов
/ 22 апреля 2010

Помощник оценивается, и результат возвращается до отображения страницы ... link_to_function использует клиентскую часть JavaScript после отображения страницы.

Исходя из вашего кода, вы, вероятно, должны иметь в своем контроллере действие, которое использует project_id и guideline_id для добавления руководства к проекту. Ваша ссылка должна отражать это, например, projects_add_guideline_path (проект, руководство) с содержанием вашего помощника в новом действии.

В поле зрения:

link_to projects_add_guideline_path(@project, guideline)

В контроллере:

def add_guideline_to_project
  @project = Project.find(params[:project_id])
  @guideline = Guideline.find(params[:guideline_id])
  @project.guidelines << @guideline
  @project.save   
  redirect_to dashboard_path 
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...