2017-12-26 21 views
1

私は最近phoenixと仕事を始めましたが、実際には私は通常SQLデータベースなしで作業しています。ectoでのいくつかの問題

私は、関連性を統合するための古典的なブログに取り組んでいます。 私は基本的な関連を作成しました:

schema "categories" do 
    field :category_name, :string 
    field :logo, :string 
    has_many :posts, Lclp.Post 

    timestamps() 
    end 

schema "posts" do 
field :author, :string 
field :content, :string 
field :content_raw, :string 
field :desc, :string 
field :logo, :string 
field :title, :string 
belongs_to :category, Lclp.Category 

timestamps() 
end 

この1、:

  • ポストはカテゴリに属する​​
  • カテゴリとして多くの記事

をここではそれらのスキーマがありますうまく動作している、私はpreloadの後にcategory_idからカテゴリ名を呼び出すことができます。

問題はポストを挿入するとき、私はカテゴリを選択することができますポストを作成するためのフォームを作成しましたで、タイトルを設定し、等...私のコントローラは、パターンマッチングにより、すべてのデータを取得:

def create_post(conn, %{"post" => post}) do 
     IO.inspect(post) 
     changeset = Lclp.Post.add_post(%Lclp.Post{}, post) 
     IO.inspect(changeset) 

     case Lclp.Repo.insert(changeset) do 
     {:ok, data} -> 
      conn 
      |> put_flash(:info, "Post bien ajouté") 
      |> redirect(to: adminpost_path(conn, :index)) 
     {:error, changeset} -> 
      conn 
      |> assign(:section, "Creation d'un post (callback error)") 
      |> render("new.html", changeset: changeset, categories_tab: Lclp.Category.get_categories_name) 
     end 
    end 

category_idを除くすべてのフィールドがDBに追加され、NULLにとどまります。うまく動作

def changeset(post, attrs \\ %{}) do 
    post 
    |> cast(attrs, [:title, :author, :desc, :content, :content_raw, :logo]) 
    |> validate_required([:title, :author, :desc, :content, :content_raw]) 
    end 

    def add_post(post, attrs) do 
    post 
    |> changeset(attrs) 
    |> change(%{category_id: String.to_integer(Map.fetch!(attrs, "category_id"))}) 
    end 

が、私はそれを行うための良い方法のない感じている:私はCATEGORY_IDを挿入することが分かった

唯一の解決策は、その一つです。

誰かが私が間違っていることのアイデアを持っている場合。

おかげ

+2

どう '追加について:category_id'フィールドのリストへキャストに渡された? – Dogbert

+0

それは働いた!事実は私がキャストを使用しようとしたときです:フィールドキーとしてカテゴリを使用していた、明らかに意味をなさない結合をキャストしようとしました。助けてくれてありがとう –

+0

@ClerisseLucas何が間違っていたのか、それがどのように解決されたのかを説明しながら、この質問に答えてください。 SOは将来のユーザーのための知識ベースなので、知識を表現することは必須です。 – mudasobwa

答えて

1
あなただけ castに渡された許可されたフィールドのリストに category_idを追加し、これを手動で行う必要はありません

​​
関連する問題