2016-04-07 10 views
1

ich ein Beitrag Model/View/Controller/templates in meiner Phoenix-Anwendung mit dem folgenden Schema haben:Nur noch Beiträge in Post-Übersicht Veröffentlicht

schema "posts" do 
    field :title, :string 
    field :content, :string 
    field :published, :boolean 
    belongs_to :user, MyApp.User 

    timestamps 
    end 

Derzeit in web/controllers/post_controller.ex ich dies habe:

def index(conn, _params, user) do 
    projects = Repo.all(MyApp.Project) 
    render(conn, "index.html", projects: projects) 
end 

Meine templates/post/index.html.eex Datei listet alle Beiträge auf; Ich möchte jedoch nur die Posts anzeigen, die veröffentlicht werden (Posts, bei denen published gleich true ist).

Ich weiß, dass ich diese Zeile in der Indexaktion ändern muss - aber ich bin mir nicht sicher, was ich ändern soll. Was ist die beste Vorgehensweise dafür in Phoenix/Elixir?

Was ist der beste Weg, dies zu tun?

Antwort

2

Dies kann durch Modifikation web/controllers/post_controller.ex wie folgt geschehen:

def index(conn, _params, user) do 
    projects = Repo.all(from u in Project, where: u.approved == true) 
    render(conn, "index.html", projects: projects) 
    end 

Ich bin nicht sicher, ob dies der richtige Weg ist/bester Weg, um das Ergebnis zu erreichen; aber es funktioniert. Bitte kommentieren und lassen Sie mich wissen oder eine andere Antwort posten, wenn es einen besseren Weg gibt.

+0

Das ist so ziemlich für Ihren Fall. Ich kann mich an keinen besseren Weg erinnern. Aber ich habe einige Vorschläge: - Es ist gute Praxis, Modelle, die Sie häufig in einem Controller verwenden Alias-Modelle - Als Übung versuchen, einen Filter (wenn Sie zeigen, nur veröffentlicht, wenn falsch alle anzeigen) für Sie Index-Aktion. –

+0

Ja, Filter wäre großartig. Sie könnten es auf 'Repo.all (Project.approved)' ' – JustMichael

+0

kürzen kann einer von Ihnen ein Beispiel geben? wird als eine Antwort akzeptieren, wenn Sie das tun. Vielen Dank :) –