2011-09-24 78 views
1

我正在尝试更新我的摄影师模型。但是,如何解决Rails路由和回形针问题不会取代图像。Rails如何更新图像?以及如何进行RESTful路由?

当我提交我的表单的网址是:http://localhost:3000/admin/photographers/save.75这给出了一个错误。 Couldn't find Photographer without an ID

而且我的图像没有更新。

我的形式:

<%= simple_form_for @photographer, :url => save_admin_photographers_path(@photographer), :html => {:multipart => true, :method => :post} do |f| %> 
    <%= javascript_include_tag "tiny_mce/tiny_mce" %> 
    <%= javascript_include_tag "init_my_tiny_mce" %> 

    <%= f.input :name, :label => 'Name' %> 
    <%= f.text_area :text, :label => 'Text', :size => '12x12' %> 
    <%= f.file_field :image, :label => 'Image' %> 
    <% if @photographer %> 
    <% if @photographer.image %> 
     <p class="ok"> 
     <label for="dd">image ok</label> 
     <%= image_tag("http://s3-eu-west-1.amazonaws.com/kjacobsen/photographer/image/#{@photographer.id}/#{@photographer["image"]}", :size => "39x22") %> 
     </p> 
     <p> 
     <label for="sdd">&nbsp;</label> 
     <%= link_to("remove", {:action => "remove_image", :id => @photographer.id}, {:confirm => "Are your sure?"}) %> 
     </p> 
    <% else %> 
     <p class="current"> 
     <label for="dd"></label> 
     No image uploaded for movie 
     </p> 
    <% end %> 
    <br /> 
    <% end %> 

    <br /> 
    <%= f.file_field :flv, :label => 'Upload FLV' %> 
    <br /> 
    <% if @photographer %> 
    <% if @photographer.flv %> 
     <p class="ok"> 
     <label for="dd">flv: <%= @photographer["flv"] %></label> 
     <%= link_to("remove", {:action => "remove_flv", :id => @photographer.id}, {:confirm => "Are your sure?"}) %> 
     </p> 
    <% else %> 
     <p class="current"> 
     No flv uploaded 
     <br /><br /> 
     </p> 
    <% end %> 
    <% end %> 
    <br /> 
    <%= f.file_field :quicktime, :label => 'Upload Quicktime' %> 
    <br /> 
    <% if @photographer %> 
    <% if @photographer.quicktime %> 
     <p class="ok"> 
     <label for="dd">quicktime: <%= @photographer["quicktime"] %></label> 
     <%= link_to("remove", {:action => "remove_quicktime", :id => @photographer.id}, {:confirm => "Are your sure?"}) %> 
     </p> 
    <% else %> 
     <p class="current"> 
     <label for="dd"></label> 
     No quicktime uploaded 
     <br /> 
     </p> 
    <% end %> 
    <% end %> 


    <%= f.button :submit, :value => 'Create movie' %> 
<% end %> 

我的更新控制器:

def save    
    @photographer = Photographer.find(params[:id])    
    @photographer.update_attributes(params[:photographer])  

    if [email protected]         
    flash[:notice] = "&nbsp;" 
    render_action 'edit'    
    else 
    flash[:notice] = "update ok" 
    redirect_to :action => 'edit', :id => @photographer.id   
    end  
end 

我的路线:

namespace :admin do 
    resources :photographers do 
    collection do 
     post :save 
    end 
    end 
end 

回答

1

你在做什么基本上是一个update行动。当您执行resources :photographers时,会自动创建更新路由,您可以通过在终端中键入rake routes来验证此更新路由。

你应该从save你的控制器动作重命名为update和删除自定义路线:

namespace :admin do 
    resources :photographers 
end 

然后使用update路线的形式:

:url => admin_photographer_path(@photographer) 

你也应该改变你的HTML方法,更新操作使用PUT

:method => :put 

希望这会有所帮助。

+0

我试过了,但在提交表单时得到以下内容:没有路由匹配“/ admin/photographers/75” –

+0

@Railsbeginner'rake routes'说什么?我也假设你的控制器名称是'Admin :: PhotographersController'? –

+0

我的耙路线:http://pastie.org/2584598 –

相关问题