2011-05-11 50 views
0

基本上发生了什么是我可以创建一个新的项目被保存到我的数据库中的表。但是当我去编辑项目时,表单打开了,我做了更改,然后当我去提交时,它将我带到与编辑页面相同的URL,并给我路由错误没有路由匹配“/ support/14 /编辑“,但如果您在地址栏中输入它,它会打开编辑表单,但没有保存任何更改。所以这是我的代码。窗体上的轨道3路线问题编辑

的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 => :unprocessable_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 %> 

我相信这就是全部relavent代码。

+0

为什么在您的编辑表单中发布回POST编辑动词?你是否应该使用PUT动词发布“更新”? – 2011-05-11 05:36:58

+0

请参阅下面的@ scragz的答案。只需将它留作form_for @post以供新增和编辑,rails会计算出端点和动词的机制。 – 2011-05-11 05:39:01

回答

1
<h1>Editing Support Item</h1> 

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

您正在覆盖该URL。它应该能够像这样自动生成,如果你正在做所有的标准休息。如果这不起作用,只知道你不想提交到/ support_items/1/edit,你想提交到/ support_items/1。

+0

这个问题并没有出现在我的代码中,我做了一点挖掘,发现“支持”是由rails保留的。我用“faq”代替“支持”创建了完全相同的东西,并且它可以无缝工作。然后,我所要做的就是在routes.rb文件中创建资源:faq,:path =>'''' – mediarts 2011-05-11 17:34:56

+0

这很好。尽管如此,你仍然可以简化地狱!你会发现Rails就是让Rails做它想做的事情。 – scragz 2011-05-19 01:18:19