rails 2.3 создание без сохранения имени, но с сохранением URL - PullRequest
0 голосов
/ 14 февраля 2012

Я могу создать новый список клипов, но имя (john) не сохраняется, вместо этого сохраняется путь (/asset/clip_list/56)! и я получаю это в адресной строке после нажатия на создать localhost:3000/asset/clip_lists.%23 asset::cliplist:0x7fb4f09751b0\> и пустая страница вместо перезагрузки страницы с вновь созданным клипом (localhost: 3000 / asset / clip_list / 56).

Вот моя функция

def create
    @clip_list = Asset::ClipList.new(params[:clip_list])
    @clip_list.owner = current_user.id
    respond_to do |format|
      if @clip_list.save
        flash[:notice] = 'ClipList was successfully created.'
        format.html { redirect_to(asset_clip_lists_path(@clip_list)) }# asset_clip_lists_path =  /asset/clip_lists
       format.xml  { render :xml => @clip_list, :status => :created, :location => @clip_list }
     else
       format.html { render :action => "new" }
       format.xml  { render :xml => @clip_list.errors, :status => :unprocessable_entity }
   end
end

Что не так? Вот моя модель clip_list.rb

class Asset::ClipList < ActiveRecord::Base
  establish_connection :assets_development
  set_table_name "clip_lists"
  has_many :asset_clips
  has_many :clip_lists_users
  has_many :users, :through  => :clip_lists_users
  belongs_to :user, :class_name => "User", :foreign_key => "owner"
  acts_as_taggable_on :tags
end


вот мой _form.haml

form_for(@clip_list, :url => asset_clip_lists_path(@clip_list), :html => {:class => 'form'}) do |f|   
.group  
    = f.label 'Name', 'Name', :class => 'label'  
    = f.text_field :name, :class => "text"  
    %span.description A short name for your clip list  
  .group  
    = f.label 'Description', 'Description', :class => 'label'  
    = f.text_field :description, :class => 'text'  
  .group  
    = f.submit create_or_update(@clip_list).humanize

Вот рейк-маршруты

asset_clip_lists     GET      /asset/clip_lists(.:format)                               {:controller=>"asset/asset/clip_lists", :action=>"index"}  
                     POST     /asset/clip_lists(.:format)                               {:controller=>"asset/clip_lists", :action=>"create"}  
new_asset_clip_list  GET      /asset/clip_lists/new(.:format)                           {:controller=>"asset/clip_lists", :action=>"new"}    
edit_asset_clip_list GET    /asset/clip_lists/:id/edit(.:format)                      {:controller=>"asset/asset/clip_lists", :action=>"edit"}  
                     GET      /asset/clip_lists/:id(.:format)                           {:controller=>"asset/clip_lists", :action=>"show"}  
                     PUT      /asset/clip_lists/:id(.:format)                           {:controller=>"asset/clip_lists", :action=>"update"}  
                     DELETE   /asset/clip_lists/:id(.:format)                           {:controller=>"asset/clip_lists", :action=>"destroy"}  
delete_asset_clip_list        /asset/clip_list/:id/destroy                              {:controller=>"asset/clip_lists", :action=>"destroy"}  
asset_clip_list              /asset/clip_list/:id                                      {:controller=>"asset/clip_lists", :action=>"show"}    

Вот route.rb

map.namespace :asset do |asset|  
asset.resources :clip_lists, :controller => 'asset/clip_lists'  
map.delete_asset_clip_list 'asset/clip_list/:id/destroy', :controller => 'asset/clip_lists', :action => 'destroy'  
map.asset_clip_list 'asset/clip_list/:id', :controller => 'asset/clip_lists', :action => 'show'  

Актив - это просто другое приложение, вложенное в папку моего приложения, поэтому у вас есть

app/controllers/asset/all asset controllers  
app/models/asset/all asset model  
...    

У меня нет табличного актива в моей БД, это просто пространство имен, которое я использовал для вложенного приложения
вот это новый

def new  
    @clip_list = Asset::ClipList.new  
    respond_to do |format|  
      format.html # new.haml  
      format.xml  { render :xml => @clip_list }  
    end  
  end 

На самом деле новый список клипов создается, но не сохраняет атрибуты и дает путь (localhost: 3000 / asset / clip_list / 56) в качестве имени

1 Ответ

0 голосов
/ 16 февраля 2012

Похоже, вы не правильно поняли маршруты. В терминале я бы набрал "rake routes", чтобы проверить, какой маршрут для asset_clip_lists_path. Если у вас нет прав, то при отправке формы она не попадет в нужное место.

Я бы также проверил класс @clip_list в представлении с @clip_list.class, чтобы увидеть, является ли это правильным классом "Asset :: ClipList".

Кроме того, я не понимаю, что у вас есть имя класса «Asset :: ClipList». Если вы пытаетесь добиться наследования в едином столе, попробуйте это.

class Asset < ActiveRecord::Base
   ...

end

class ClipList < Asset
   ...
end

Вы можете узнать больше о STI здесь .

...