开发者

Rails 3 Routes issue on form Edit

Basically whats happening is I can create a new item that gets saved to my table in my db. but when I go to edit the item, the form opens up, I make the change and then when I go to submit, it takes me to the same url as the edit page and gives me Routing Error No route matches "/support/14/edit" although if you enter that in the address bar it opens the edit form just fine, but doesn't have any of my changes saved. So here is my code.

routes.rb

resources :support

support_controller.rb

def new
  @support_item = Support.new

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @support_item }
  end
end

# GET /support/1/edit
def edit
  @support_item = Support.find(params[:id])
end

# POST /support
# POST /support.xml
def create
  @support_item = Support.new(params[:support_item])

  respond_to do |format|
    if @support_item.save
      format.html { redirect_to("/support", :notice => 'Question was successfully created.') }
    else
      format.html { render :action => "new" }
    end
  end
end

# PUT /support/1
# PUT /support/1.xml
def update
  @support_item = Support.find(params[:id])

  respond_to do |format|
    if @support_item.update_attributes(params[:support_item])
      format.html { redirect_to("/", :notice => 'Question was successfully updated.') }
      format.xml  { head :ok }
    else
      format.html { render :action => "edit" }
      format.xml  { render :xml => @support_item.errors, :status => :unproce开发者_StackOverflow社区ssable_entity }
    end
  end
end

support.rb

class Support < ActiveRecord::Base
  belongs_to :role

  scope :admin_available, order("role_id ASC") do
      Support.all
  end

  def self.available(user)
    questions =   where(:role_id => 1)
    questions +=  where(:role_id => user.roles)
    questions
  end
end

_form.html.erb

  <% if @support_item.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@support_item.errors.count, "error") %> prohibited this question from being saved:</h2>

      <ul>
      <% @support_item.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label "Support item for:" %><br />
    <%= f.collection_select :role_id, Role.find_by_max(5), :id, :name, {:default => 'everyone'} %>
  </div>
  <div class="field">
    <%= f.label :question %><br />
    <%= f.text_field :question, :class => 'genForm_question'%>
  </div>
  <div class="field">
    <%= f.label :answer %><br />
    <%= f.text_area :answer, :class => 'genForm_textarea' %>
  </div>
  <div class="field">
    <%= f.label :url %><br />
    <%= f.text_field :url, :class => 'genForm_question' %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>

new.html.erb

<h1>New Support Item</h1>

<% form_for @support_item, :url => { :action => "create" }, :html => { :method => :post } do |f| %>
    <%= render 'form', :f => f %>
<% end %>

edit.html.erb

<h1>Editing Support Item</h1>

<% form_for @support_item, :url => { :action => "edit" }, :html => { :method => :post } do |f| %>
        <%= render 'form', :f => f %>
<% end %>

I believe thats all the relavent code.


<h1>Editing Support Item</h1>

<% form_for @support_item do |f| %>
        <%= render 'form', :f => f %>
<% end %>

You are overriding the URL. It should be able to be auto-generated like that if you are doing everything with standard rest. If that doesn't work out, just know you don't want to submit to /support_items/1/edit, you want to submit to /support_items/1.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜