2016-03-30 28 views
1

Bu soru en eski Question here'a bağlanır.jRuby/Ruby on Rails veritabanı ilişkileri ve verileri geri alma

manken "Kullanıcı" ve iskeleyi "ContactDetail" aşağıdaki gibi birbirleriyle ilişkisini var.

  • Her KullanıcıHas_manyContactDetail
  • ContactDetailKullanıcı

My Soru belongs_to

Başarılı giriş bilgileriyle tüm iletişim bilgilerini html'ye nasıl yükleyebilirim? Kullanıcı yeni bir kullanıcıysa ve şu ana kadar hiçbir iletişim bilgisine sahip değilse, contact_details 'new.html.erb' yi html içinde göstermek istiyorum. Bunu yapabilir miyim?

Şimdiye kadar denediğim şey budur Girişimde sessioncontroller.rb @contacts oluşturuyorum;

def create 
    user = User.find_by_email(params[:email]) 

    if user && user.email === params[:email] && user.password === params[:password] 
    session[:user_id] = user.id 
    @contacts = ContactDetail.find_by_id(session[:user_id]) 

    redirect_to root_url, notice: "Logged in!" 
    else 
    render :new 
    end 
end 

Ve my_contacts.html.erb içinde

<% if current_user %> 
    <p> You're logged in as : <%= current_user.email %> <%= link_to "Log Out", logout_path %> </p> 
    <p> Here you can maintain your own contact details. gfdgdfgfd fdgdg sfgs q34 adg fg fs g wer rewr ererq q </p> 

    <% if @contacts != nil %> 
     <% @contacts.each do |contact| %> 
      <%session[:contact_id]=contact.id%> 
      <table> 
       <tbody> 
        <tr> 
         <td><%=contact.id%></td> 
         <td><%=contact.name%></td> 
         <td><%= contact.phonenumber %></td> 
         <td><%=link_to "edit", edit_path(:param1=>contact.id) %></td> 
         <td><%=link_to "delete",delete_path(:param1=>contact.id),:confirm => "Are you sure ?" %></td> 
        </tr> 
       </tbody> 
      </table> 
     <% end %> 
    <% else %> 
     <p> show create option </p> 
     <!-- i want to render contact_details/new.html.erb here --> 

    <% end %> 

<% else %> 
    <!-- prompt users to login or signup here --> 
<% end %> 

Not

Girişi, çıkış ve seanslar Zaten size neyi var

cevap

1

) benim girişimi çalışıyoruz ihtiyacım var, çok fazla. Değişikliklerden bazıları şunlardır: Modelin ayrıntılarına sahip olmadığımdan, formu gösteren ve kesin olmayan şekli gösteren kodu hatırlamanız yeterlidir.

Seçenek 1: İşleme şekilde içi

my_contacts.html.erb

<% if current_user %> 
    <p> You're logged in as : <%= current_user.email %> <%= link_to "Log Out", logout_path %> </p> 
    <p> Here you can maintain your own contact details. gfdgdfgfd fdgdg sfgs q34 adg fg fs g wer rewr ererq q </p> 

    <% if @contacts.present? %> <!-- Notice this? much cleaner --> 
     <!-- Same code you have --> 
    <% else %> 
     <p> show create option </p> 

      <!-- You can just render the form here like so if you want --> 

      <%= form_for(current_user.contact_details.build) do |f| %> 
      <p> 
      <%= f.label :name %><br> 
      <%= f.text_field :name %> 
      </p> 
      <p> 
      <%= f.label :phonenumber %><br> 
      <%= f.text_field :phonenumber %> 
      </p> 
      <p> 
      <%= f.submit %> 
      </p> 
     <% end %> 

    <% end %> 

<% else %> 
    <!-- prompt users to login or signup here --> 
<% end %> 

Seçenek 2: kısmen dahil ve değişken

@contact_detail verin

se ssioncontroller.rb

def create 
    user = User.find_by_email(params[:email]) 

    if user && user.email === params[:email] && user.password === params[:password] 
    session[:user_id] = user.id 
    @contacts = ContactDetail.find_by_id(session[:user_id]) 

    #new change 
    @contact_detail = current_user.contact_details.build if @contacts.empty? 

    redirect_to root_url, notice: "Logged in!" 
    else 
    render :new 
    end 
end 

my_contacts.html.erb

<% if current_user %> 
    <p> You're logged in as : <%= current_user.email %> <%= link_to "Log Out", logout_path %> </p> 
    <p> Here you can maintain your own contact details. gfdgdfgfd fdgdg sfgs q34 adg fg fs g wer rewr ererq q </p> 

    <% if @contacts.present? %> <!-- Notice this? much cleaner --> 
     <!-- Same code you have --> 
    <% else %> 
     <p> show create option </p> 

     <!-- Just render partial contact_details/new.html.erb here --> 
     <%= render 'contact_details/new' %> 
    <% end %> 

<% else %> 
    <!-- prompt users to login or signup here --> 
<% end %>