Я последовал следующий урок: http://www.themodestrubyist.com/2010/03/05/rails-3-plugins---part-2---writing-an-engine/Rails :: Engine контроллер и модели Пространства имен
И все это прекрасно работает. Я пронумеровал контроллер, используя
#app/controller/authr/accounts_controller.rb
module Authr
class AccountsController < ApplicationController
unloadable
def new
@account = Account.new
end
def create
@account = Account.new(params[:account])
if @account.save
redirect_to '/'
else
render :action => :new
end
end
end
end
И в учебнике он не пропустил пробел по модели. Я хочу, чтобы пространство имен было распространено на моей модели, поэтому оно не сталкивается с хост-приложениями. Поэтому я попытался следующий:
#app/models/authr/account.rb
module Authr
class Account < ActiveRecord::Base
attr_accessor :password
validates_confirmation_of :password
end
end
Это моя точка зрения, с помощью простого form_for, который должен пойти в accounts_path
#app/views/authr/accounts/new.html.erb
<%= form_for(@account) do |f|%>
<p>
<%= f.label :uname, "Username"%>
<%= f.text_field :uname%>
</p>
<p>
<%= f.label :password, 'Password'%>
<%= f.password_field :password%>
</p>
<p>
<%= f.submit "Submit"%>
</p>
<% end %>
Но когда я использую мое пространство имен модели я получаю следующее сообщение об ошибке:
undefined method `authr_accounts_path' for #<#<class:0x1038f54e0>:0x1038f3780>
объект создан новый метод (@account = Account.new) приводит к этим:
<Authr::Account id: nil, uname: nil, hashed_password: nil, remember_token: nil, remember_expiry: nil, created_at: nil, updated_at: nil>
Маршруты файл: (Это работает, когда я не пространство имен модели.)
Rails.application.routes.draw do |map|
resources :accounts, :only => [:new, :create],
:controller => "authr/accounts"
end
Так это маршрутизация вещь. Когда я не использую пространство имен, все работает нормально, но когда я импровизирую его, он не работает. Затем я попробовал следующее:
#routes.rb
Rails.application.routes.draw do |map|
scope "authr", :module => :authr, :as => "authr" do
resources :accounts
end
end
Теперь я получаю форму без ошибки маршрутизации. Но когда я пытаюсь отправить форму, объект не сохраняется.
Started POST "/authr/accounts" for 127.0.0.1 at Mon Mar 28 18:51:12 +0200 2011
Processing by Authr::AccountsController#create as HTML
Parameters: {"commit"=>"Submit", "authenticity_token"=>"cPH8ZmNmgoT84UMnYBoM38di+/OZQmuGQTrSv3HhFR4=", "utf8"=>"✓", "authr_account"=>{"uname"=>"usrrrrrrrrrrrrnmmmmeee", "password"=>"[FILTERED]"}}
SQL (48.0ms) BEGIN
SQL (0.5ms) SHOW TABLES
SQL (13.2ms) describe `accounts`
AREL (0.3ms) INSERT INTO `accounts` (`updated_at`, `created_at`, `remember_expiry`, `uname`, `remember_token`, `hashed_password`) VALUES ('2011-03-28 16:51:12', '2011-03-28 16:51:12', NULL, NULL, NULL, NULL)
SQL (0.4ms) COMMIT
Redirected to http://localhost:3000/
Я знаю, что я делаю @account = Account.new (PARAMS [: счет]), и если я изменить его Account.new (PARAMS [: authr_account], что я должен работать, но я хочу Титулы пользователь [: счета], который должен работать правильно, потому что контроллер в пространстве имен, а также ...
Тогда я нашел кое-что о isolated_name пространстве, так что я попытался это:
#lib/authr/engine.rb
require "authr"
require "rails"
module Authr
class Engine < Rails::Engine
isolate_namespace Authr
# engine_name :authr #deprecated?
end
end
и я изменил свои маршруты в :
Rails.application.routes.draw do |map|
resources :accounts, :only => [:new, :create],
:controller => "authr/accounts"
end
Но это дает мне следующую ошибку:
/Library/Ruby/Gems/1.8/gems/authr3-0.1.0/lib/authr/engine.rb:6: undefined method `isolate_namespace' for Authr::Engine:Class (NoMethodError)
Я попробовал все, и я посмотрел на другие драгоценные камни, и они в пространстве имен модели. Я убежден, что i нуждается в для пространства имен моих моделей, чтобы быть уверенным, что они не конфликтуют с хост-приложением. Я хочу использовать restfullroutes, но я не знаю, как я могу исправить эту проблему.
Я использую:
Daniel-Zs-MacBook-Pro:gem_test Daniel$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
Daniel-Zs-MacBook-Pro:gem_test Daniel$ rails -v
Rails 3.0.3
Спасибо за любые советы/помощь
Спасибо Cowboycoded Я обновил свой вопрос. Все еще выясняя, почему параметры не совпадают ... –