タグ付けされた質問 「ruby-on-rails-4」

Railsバージョン4に固有の問題の場合。質問がRuby on Rails全般に当てはまる場合は、タグ[ruby-on-rails]を使用します。

12
Rails Observer 4.0の代替
Observersが正式にRails 4.0から削除されたので、他の開発者が自分の代わりに何を使っているのか知りたいです。(抽出されたgemを使用する場合を除きます。)オブザーバーは確かに乱用され、時として扱いにくくなる可能性がありますが、キャッシュをクリアする以外にも多くのユースケースがあり、有益でした。 たとえば、モデルへの変更を追跡する必要があるアプリケーションを考えてみましょう。オブザーバーはモデルAでの変更を簡単に監視し、モデルBでそれらの変更をデータベースに記録できます。複数のモデルにわたる変更を監視したい場合は、1人のオブザーバーがそれを処理できます。 Rails 4では、他の開発者がその機能を再現するためにObserversの代わりに使用している戦略に興味があります。 個人的には、これらの変更が各モデルコントローラーのcreate / update / deleteメソッドで追跡される、一種の「ファットコントローラー」の実装に傾いています。各コントローラーの動作が少し膨れますが、すべてのコードが1か所にあるため、読みやすさと理解に役立ちます。欠点は、非常によく似たコードがいくつかのコントローラーに散在していることです。そのコードをヘルパーメソッドに抽出することはオプションですが、これらのメソッドへの呼び出しはどこにでも散らかっています。世界の終わりではありませんが、「細いコントローラー」の精神でもありません。 ActiveRecordコールバックも考えられる別のオプションですが、私の意見では2つの異なるモデルを非常に密接に結合する傾向があるため、個人的には好きではありません。 したがって、Rails 4のオブザーバーのない世界では、別のレコードが作成/更新/破棄された後に新しいレコードを作成する必要がある場合、どの設計パターンを使用しますか?ファットコントローラー、ActiveRecordコールバック、または何か他のもの? ありがとうございました。

7
Rails after_saveコールバックで変更された属性を特定しますか?
モデルの公開済み属性がfalseからtrueに変更された場合にのみ通知を送信するように、モデルオブザーバーでafter_saveコールバックを設定しています。などの方法が変わったので?モデルが保存される前にのみ有用ですが、私が現在(そして失敗して)それを試みている方法は次のとおりです: def before_save(blog) @og_published = blog.published? end def after_save(blog) if @og_published == false and blog.published? == true Notification.send(...) end end これを処理するための最良の方法については、誰かが提案します(できれば、モデルオブザーバーのコールバックを使用して(コントローラーコードを汚染しないようにするため))。

9
Rails 4-Gem :: LoadError:データベースアダプターに「mysql2」を指定したが、gemがロードされていない
私のgemfileには次のものが含まれています。 gem 'mysql2' 私のdatabase.ymlは次のとおりです: default: &default adapter: mysql2 database: <%= ENV['db_name'] %> username: <%= ENV['db_user'] %> password: <%= ENV['db_pass'] %> host: <%= ENV['db_host'] %> pool: 32 socket: <%= ENV['socket'] %> development: <<: *default production: <<: *default 私は両方bundle updateを実行しましたがbundle install、私のGemfile.lockはmysql2を示しています。 ただし、実行するrake db:migrateと、コンピューターとステージングサーバーの両方で次のようになります。 myproject.com(master)$ rake db:migrate WARNING: Use strings for Figaro configuration. …


6
ラムダとRails 4スタイルの引数を持つスコープ?
Rails 4で以下がどのように行われるのか、または3と同じように4でも同じように引数を渡すことができるラムダを使用するためにRails 3アプローチを使用するだけなのかと思います。 私はRails 3にかなり慣れていないので、Rails 4を実行するサンプルをいくつか試してみます。 これが私のRails 3コードです: class Person < ActiveRecord::Base scope :find_lazy, lambda {|id| where(:id => id)} end # In console I can call Person.find_lazy(1) したがって、これがRails 4の方法である場合、-> {}を使用することは、ラムダですよね?scope :all_lazy, -> { select("*") }議論が必要な場合はどうでしょうか。-> {}を使用すると、いくつかの異なるアイデアを試し、コンソールで引数エラーが発生しました。

4
Rails 4-強力なパラメーター-ネストされたオブジェクト
かなり簡単な質問があります。しかし、これまでのところ解決策を見つけていません。 これがサーバーに送信するJSON文字列です。 { "name" : "abc", "groundtruth" : { "type" : "Point", "coordinates" : [ 2.4, 6 ] } } 新しい許可方法を使用して、私は持っています: params.require(:measurement).permit(:name, :groundtruth) これはエラーをスローしませんが、作成されたデータベースエントリnullにはGroundtruth値の代わりに含まれます。 設定しただけの場合: params.require(:measurement).permit! すべてが期待どおりに保存されますが、もちろん、これは強力なパラメーターによって提供されるセキュリティを無効にします。 解決策、配列を許可する方法は見つかりましたが、ネストされたオブジェクトを使用する単一の例ではありません。これはかなり一般的なユースケースであるため、何らかの形で可能でなければなりません。それで、それはどのように機能しますか?


6
xxxのコピーがモジュールツリーから削除されましたが、まだアクティブです
エラーはTenantIdLoaderモジュールの実際のコンテンツとは何の関係もないと確信しています。代わりに、ActiveSupport依存関係と関係があります。 このエラーを乗り越えられないようです。私が読んだことから、それActiveRecord::BaseはリロードされているかリロードされているためCompany::TenantIdLoaderであり、どういうわけかそれを伝えていません。助けてください!Rails 4.2にアップグレードできるようになりたいです。 編集 Tenantこれは、自動的に再読み込みされるリファレンスを参照しているためです。しかし、実際にクラスを参照できるようにする必要があるので、これを回避する方法を誰かが知っていますか? config / application.rb config.autoload_paths += %W( #{config.root}/lib/company ) config / initializers / company.rb ActionMailer::Base.send(:include, Company::TenantIdLoader) lib / company / tenant_id_loader.rb module Company module TenantIdLoader extend ActiveSupport::Concern included do cattr_accessor :tenant_dependency self.tenant_dependency = {} after_initialize do self.tenant_id = Tenant.active.id if self.class.tenant_dependent? and self.new_record? and Tenant.active.present? and …

17
そのようなファイルを読み込めません— bundler / setup(LoadError)
Ruby 2.0でRails 4アプリケーションを設定していますが、「Webアプリケーションを開始できませんでした」というメッセージが表示され、次のトレースが表示されます。 cannot load such file -- bundler/setup (LoadError) /usr/local/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require' /usr/local/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require' /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/lib/phusion_passenger/loader_shared_helpers.rb:212:in `run_load_path_setup_code' /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:96:in `preload_app' /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:150:in `<module:App>' /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>' /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:28:in `<main>' 私のapache2.confは: LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19/buildout/apache2/mod_passenger.so PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19 PassengerDefaultRuby /usr/local/bin/ruby bundle -v です: Bundler version 1.3.5 ruby -v です: ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] gem env です: …

6
ネストされた属性の許可されていないパラメーター
私が持っているBill多くの持っているオブジェクト、Dueオブジェクトを。Dueオブジェクトはまたに属しますPerson。Billとその子をDuesすべて1ページで作成できるフォームが必要です。このRailscastの属性と同様に、ネストされた属性を使用してフォームを作成しようとしています。 関連するコードを以下に示します。 due.rb class Due < ActiveRecord::Base belongs_to :person belongs_to :bill end bill.rb class Bill < ActiveRecord::Base has_many :dues, :dependent => :destroy accepts_nested_attributes_for :dues, :allow_destroy => true end bills_controller.rb # GET /bills/new def new @bill = Bill.new 3.times { @bill.dues.build } end bills / _form.html.erb <%= form_for(@bill) do |f| %> …

3
宝石「uglifier」をロードしようとしたときにエラーが発生しました。(Bundler :: GemRequireError)
このエラーが発生するのはなぜですか? shibly@mybox:~/blog$ rails server /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:80:in `rescue in block (2 levels) in require': There was an error while trying to load the gem 'uglifier'. (Bundler::GemRequireError) from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:76:in `block (2 levels) in require' from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:72:in `each' from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:72:in `block in require' from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:61:in `each' from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:61:in `require' from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler.rb:99:in `require' from /home/shibly/blog/config/application.rb:7:in …

18
Rails 4:アセットが本番環境に読み込まれない
アプリを本番環境に配置しようとしていますが、画像とCSSアセットパスが機能していません。 これが私が現在やっていることです: 画像アセットは/app/assets/images/image.jpgにあります スタイルシートは/app/assets/stylesheets/style.cssにあります 私のレイアウトでは、次のようにcssファイルを参照しています。 <%= stylesheet_link_tag "styles", media: "all", "data-turbolinks-track" => true %> ユニコーンを再起動する前に、実行するRAILS_ENV=production bundle exec rake assets:precompileと成功し、public/assetsディレクトリにフィンガープリントされたファイルが表示されます。 私のサイトを閲覧すると、の404 not foundエラーが表示されmysite.com/stylesheets/styles.cssます。 何が悪いのですか? 更新: 私のレイアウトでは、次のようになります: <%= stylesheet_link_tag "bootstrap.min", media: "all", "data-turbolinks-track" => true %> <%= stylesheet_link_tag "styles", media: "all", "data-turbolinks-track" => true %> <%= javascript_include_tag "application", "data-turbolinks-track" => true %> …

8
Rails 4のActiveRecordを無効にする
Rails 4でActiveRecordを無効にしたいのですが、 config/application.rb require File.expand_path('../boot', __FILE__) # require 'rails/all' -- commented require "action_controller/railtie" require "action_mailer/railtie" #require "active_resource/railtie" no need #require "rails/test_unit/railtie" no need #require "sprockets/railtie" no need # Require the gems listed in Gemfile, including any gems # you've limited to :test, :development, or :production. Bundler.require(:default, Rails.env) module MyApp class …

8
Rails 4.1の選択から列挙型を保存する
Rails 4.1の列挙型を使用して、ワインの色を追跡しています。 Wine.rb class Wine < ActiveRecord::Base enum color: [:red, :white, :sparkling] end 私の見解では、ユーザーが特定の色のワインを選択できるように、selectを生成します f.input :color, :as => :select, :collection => Wine.colors これにより、次のHTMLが生成されます。 <select id="wine_color" name="wine[color]"> <option value=""></option> <option value="0">red</option> <option value="1">white</option> <option value="2">sparkling</option> </select> ただし、フォームを送信すると、「」という引数エラーが表示されます'1' is not a valid color。私はので、これは実現color等しくなければなりません。1"1" Railsに色を文字列ではなく整数として解釈させる方法はありますか?

5
Rails 4の非推奨の警告、順序付きのhas_many
class RelatedList < ActiveRecord::Base extend Enumerize enumerize :list_type, in: %w(groups projects) belongs_to :content has_many :contents, :order => :position end コンソールでレコードを作成しようとすると警告が表示されるRailsアプリにこのモデルがあります。 非推奨の警告:RelatedList.has_many:contents宣言の次のオプションは非推奨です::order。代わりにスコープブロックを使用してください。たとえば、次のとおりです:has_many:spam_comments、条件:{spam:true}、class_name: 'Comment'は、次のように書き換える必要があります:has_many:spam_comments、-> {where spam:true}、class_name: 'Comment'。(/Users/shivam/Code/auroville/avorg/app/models/related_list.rb:7から呼び出されます) Rails 4にはモデルで使用するための新しい:order構文があるようですが、Railsガイドにドキュメントがありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.