Rails to Phoenix'e taşınıyorum ve cevabı bulamadığım bir soruna yanıt veriyorum.Geçerli Kullanıcı Bilgilerini Phoenix Framework'teki Bir İletiye Ekleme
Kullanıcı kimlik doğrulaması ayarlamam var (özel kimlik denetimi işlevinde @current_user öğesini işaretleyerek).
Ayrıca bir Post model/denetleyici/görünüm (tanıdık w Raylar için iskele) var.
otomatik olarak form kullanıcı doldurmak zorunda olduğu bir form alanına olmadan (her mesaj bir kullanıcıya ait olacaktır) gönderildiğinde @current_user kimliğine sahip Gönder alanını doldurmak istiyorum.
yılında
@post.user = current_user.id
nasıl Phoenix Çerçeve/İksiri ile bunu yapıyorsunuz: ... Bu oldukça basit raylar böyle bir şey çalışır sonrası kumandanın oluşturmak eylem eklendi? Benim PostController
def create(conn, %{"post" => post_params}) do
changeset = Post.changeset(%Post{}, post_params)
case Repo.insert(changeset) do
{:ok, _project} ->
conn
|> put_flash(:info, "Please check your email inbox.")
|> redirect(to: page_path(conn, :thanks))
{:error, changeset} ->
render(conn, "new.html", changeset: changeset)
end
end
oluşturmak eylem mantığı bu tip kontrolörü veya modele uygulanmalı İşte
? veya görünümde bunu yapmak için iyi bir yol var mı (güvenli olmayan bir gizli alan kullanmadan).
Çözüm (Gazler sayesinde):
def create(conn, %{"post" => post_params}) do
current_user = conn.assigns.current_user
changeset = Post.changeset(%Post{user_id = current_user.id}, post_params)
case Repo.insert(changeset) do
{:ok, _project} ->
conn
|> put_flash(:info, "Please check your email inbox.")
|> redirect(to: page_path(conn, :thanks))
{:error, changeset} ->
render(conn, "new.html", changeset: changeset)
end
end
Teşekkürler Gazler. Sorumu düzenledim - conn.assigns.current_user (ve çalışır) için kontrol eden özel bir işlev var; ancak, undefined function current_user diyerek bir hata alıyorum. Current_user öğesinin conn.assigns adresimde olduğundan nasıl emin olurum? –
"current_user = conn.assigns.current_user" öğesini unuttuğunuz gibi görünüyor (ki sadece ilk örnekte gösterdim. Bunu da içerecek şekilde 2. sayfayı güncelledim). Eğer 'conn.assigns.current_user' çağırmak istemiyorsanız, https://hexdocs.pm/phoenix/Phoenix.Controller.html – Gazler
'un 'overriding: action' bölümüne göz atmak isteyebilirsiniz. Evet yaptım. Mantıklı. Yardım ettiğin için teşekkür ederim! –