0

足場ジェネレーターを使用して、「自動」リソースを中心とした CRUD を作成しました。マニュアル リソースには、'name' 列、文字列、そしてもちろん 'id' 列、整数のみが含まれています。

また、「マニュアル」リソースを中心とした CRUD を手動で作成しました。手動リソースは、自動リソースと同じスキーマです。手動で作成したコントローラー アクションの論理ルートを作成しました。

私が理解できないのは、リソース列名に関連するキーが新しいリソース インスタンスにどのように入力されるかです。

自動リソースで新しい行を作成するために必要な、スキャフォールドで生成されたアクションは次のとおりです。

  def new
    @automatic = Automatic.new
  end

views/automatic/newで、リソース インスタンスを観察するための erb タグを作成しました。

<%= debug @automatic %>

画面に出力されたものは次のとおりです。

--- !ruby/object:Automatic
attributes:
  id: 
  name: 

私が疑ったように。

手動リソースで新しい行を作成するために必要な、手動で作成されたアクションは次のとおりです。

 def new
    @manual= Manual.new
 end

views/manual/newで、リソース インスタンスを観察するための erb タグを作成しました。

<%= debug @manual %>

画面に出力されたものは次のとおりです。

--- 
...

完全に空です!名前列を更新しようとするとActiveModel::ForbiddenAttributesError in FeaturesController#createエラーになりますか? モデルは同一であり、その答えは、手動のリソース インスタンスにキーが入力されていないという事実にあるはずです。

なぜだめですか?理解できない。それらの MVC パスは同一です。

これは完全に機能します:

@automatic = Automatic.new

そして、これは実際にはまったく機能しません:

@manual = Manual.new

なんで?

4

1 に答える 1

0

私はこれを信じていません。Railsサーバーの電源を入れ直さなければなりませんでした。インタープリターは、サーバーが起動するたびにリソース列名をどこかに保存する必要があり、新しいインスタンスを作成するときにこれらを使用します。

この概念について説明するよりも良いリンクを次に示します

真面目な話、Rails 4.0 には大きな落とし穴もあります。コントローラー内のすべての新しい動的リソース メソッドをホワイトリストに登録する必要があります。ここ:

   def album_params
      params.require(:album).permit(:title, :artist, :release_date, :genre)
   end

ここで、artist_id という名前の新しい列を適切に作成し、必要な CRUD を実装したとしましょう。Rails 4 ではまだ作成されません。上記の.permitメソッドにシンボル:artist_idとして明示的に追加する必要があります。

少し面倒ですが、それは私たち自身のためだと確信しています:)

于 2013-09-23T05:26:37.047 に答える