2017-12-26 50 views
1

최근 피닉스와 협력하기 시작했습니다. 사실은 보통 SQL 데이터베이스가없는 상태입니다.외계인과 관련된 몇 가지 문제

나는 협회를 통합하기 위해 고전적인 블로그 작업을하고 있습니다. 나는 기본적인 협회 만들었습니다

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 

이 하나 :

  • 게시물이 범주에 속하는
  • 카테 많은 게시물

을 여기 스키마는 잘 작동합니다. 미리로드 된 후에 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에 유지됩니다.

나는 CATEGORY_ID를 삽입 발견 유일한 해결책은 하나입니다

잘 작동하지만 난 그것을 할 기분이 아니 좋은 방법이
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 

.

누군가 내가 잘못하고있는 것에 대한 아이디어가있는 경우.

감사

+2

어떻게'추가에 대한 : category_id' 필드의 목록 '캐스팅 '으로 넘어 갔습니까? – Dogbert

+0

효과가있었습니다! 사실 내가 캐스트를 사용하려고했을 때 : 필드 키로 카테고리를 사용하고 있었지만 분명히 의미가없는 연관성을 캐스팅하려고했습니다. 도움을 주셔서 감사합니다 –

+0

@ ClerisseLucas이 질문에 답하기 위해 시간을내어 무엇이 잘못되었으며 어떻게 해결되었는지 알려주십시오. SO는 미래의 사용자를위한 지식 기반이므로 지식을 표현하는 것이 필수적입니다. – mudasobwa

답변

1
그냥 cast에 전달 허용 필드 목록에 category_id를 추가, 수동으로이 작업을 수행 할 필요가 없습니다

:

|> cast(attrs, [:title, :author, :desc, :content, :content_raw, :logo, :category_id]) 
                     ^^^^^^^^^^^^