Частичное, содержащее форму, появляется в обоих контроллерах, но не может быть отправлено на одном из них - PullRequest
0 голосов
/ 29 июля 2010

У меня есть партиал, который содержит форму:

<% form_for :message, :url => { :action => "create" }, :html => { :id => 'form' } do |f| %>
  <%= f.error_messages %>

  <%= f.label :title, "title" %>
  <%= f.text_field :title %>

  <%= f.label :tag, "tag" %>
  <% if controller.controller_name == "tags" %>
    <%= f.text_field :tag_list, :value => @title %>
  <% else %>
    <%= f.text_field :tag_list %>
  <% end %>

  <%= f.label :name, "name" %>
  <%= f.text_field :name %>

  <%= f.label :email, "email" %>
  <%= f.text_field :email %>

  <%= f.label :title, "message" %>
  <%= f.text_area :content %>

  <%= f.submit 'submit' %>

<% end %>

Я использую это в двух контроллерах: сообщения и теги.Он отлично работает в контроллере сообщений, но не в контроллере тегов.Когда он отображается в тегах # show, он автоматически заполняет поле тега.Когда сообщение отправляется из тегов # show, я перенаправляюсь в корень сайта с ошибкой flash «Тег не существует».

контроллер тегов:

class TagsController < ApplicationController
  before_filter :redirect_if_doesnt_exist#, :only => :show

  def show
    @title = Tag.find(params[:id]).name
    @tag = Tag.find(params[:id])
    @entries = Entry.paginate(Entry.find_tagged_with(@tag), 
            :page => params[:page], :per_page => 10, :order => "name")
    @messages = Message.paginate(Message.find_tagged_with(@tag), 
            :page => params[:page], :per_page => 10, :order => "updated_at DESC")
    @related_entries = Entry.tagged_with(@tag, :on => :tags)
    @related_tags = @related_entries.collect{|x|x.tags}.flatten.uniq
    @related_tags.delete(@tag)
  end

  private
  # Redirect if requested tag does not exist
  def redirect_if_doesnt_exist
    @tag = Tag.find(params[:id]) rescue nil
    if @tag.nil? # maybe "or @tag.empty?" could solve the empty tag issue
      flash[:error] = 'Tag does not exist.'
      redirect_to '/'
    end
  end
end

В случаеНепонятно: частичное отображается в виде, форма внутри него просто не передает данные из контроллера тегов и перенаправляется.Частично работает нормально из контроллера сообщений.Это приложение Rails 2.3.x.Спасибо, что прочитали мой вопрос, ваше время ценится.

1 Ответ

1 голос
/ 29 июля 2010

Ваша проблема заключается в том, что URL формы частично является только действием:

<% form_for :message, :url => { :action => "create" }, :html => { :id => 'form' } do |f| %>

Если вы включите это в представление, которое не находится под messages_controller, это вызовет неправильное действие.Если вы включите это в представление тегов, вместо этого оно попытается вызвать действие create для tags_controller.

Вероятно, это сработает, если вы просто добавите контроллер тоже:*

...