1

複数の予定リストを作成するためのアプリを作成しています。したがって、ユーザーはサインインし、複数のリストを持ち、各リストには複数のアイテムが含まれています。他のすべてが機能していますが、私はアイテムを作成するのに苦労しています。Railsで複数のコントローラで定義してアクセスできる変数を作成

リストに新しいアイテムを作成するための私のコードは、(これはitems_controllerで発見された)である。

def create 

    @list = 
    @new_item = @list.items.build(params[:item]) 
    if @new_item.save 
     flash[:success] = "Item saved!" 
    end 
    redirect_to root_path 
    end 

そして、問題がある、私は@listがどうあるべきかを定義するかどうかはわかりません。私は新しいリストを作成するために(セッションに基づいて)変数current_userを持っていますが、セッションごとに1人のユーザーしかなく、セッションごとに複数のリストがあるので、そのメソッドを複製することはできません。

基本的には、どのリストに属しているのかをアイテムに知らせる方法が残っています(これは、私が行ったショーページのリストでなければなりません)。 Javaで私はリストに行くたびに再定義する静的変数を持っていましたが、それをやってみましたがうまくいきませんでした。

+0

静的変数を使用しているJava Webアプリケーションでも、ユーザーリストをデータベースに保存してください。 – house9

+0

リストはデータベースにあります。問題は、各リストに独自のIDがあっても、どの特定のリストに属しているのかわからない – user1136497

+0

これはどのようにすることができますか?リストhas_many items:something、habtm? –

答えて

1

変数を格納するのではなく、urlパラメータを使用してリストを追跡する必要があります。フォームを変更してlist_idパラメータを含める必要があります。次に、コントローラであなたはリスト項目を作成しているとき、ような何かを:

@list = List.find params[:list_id] 
@new_item = @list.items.build params[:item] 

それとも、あなたのparamsはitems[list_id]パラメータを含めた場合は、その後、Railsの中で、それはそうあなただけのことができるようにする必要がありparams[:item][:list_id]にアクセスできるようになりますただやる:あなたはそれをこの第二の方法を行う場合

@new_item = ListItem.create params[:item] 

、ちょうどlist_idが存在し、それが存在するポイントのリストことを保証するためのListItemモデルで検証を追加してください。

+0

それは良い考えです - 私はURLパラメータでそれを追跡する必要があります。しかし、本当に、私はメインのホームページからリストショーページにリンクすると、list_idにparamsからアクセスできるリストページ上にあると思います。 – user1136497

+0

入手しました。どうもありがとうございます!! – user1136497

+0

クール!私の答えの横のチェックマークをクリックしてそれを受け入れてください。 –

1

listItemにはリストモデルに対する外部キーが必要であり、リストモデルには外部キーが必要です。このようにして、構造を簡単に横断することができます。

class ListItem < ActiveRecord::Base 
    belongs_to :list 
end 

class List < < ActiveRecord::Base 
    belongs_to :account 
    has_many :list_items 
end 

class Account < < ActiveRecord::Base 
    has_many :lists 
end 
+0

これは、データベースの設定方法です。しかし、リストアイテムを作成するには、どのリストを所属させるべきかを指定する必要があります。リストには属していないため、外部キー(list)を使用してそのリストを指定する方法がわかりません。リストはまだありません。 – user1136497

関連する問題