0

ユーザーと処理 (メッセージと考えることができます) の 2 つのモデルがあります。

ユーザー:

class User < ActiveRecord::Base
    attr_accessible :name, :email, :password, :password_confirmation
    has_secure_password

    has_many :sent_treatings, :foreign_key => "requestor_id", :class_name => "Treating", dependent: :destroy
    has_many :received_treatings, :foreign_key => "requestee_id", :class_name => "Treating", dependent: :destroy

end

治療:

class Treating < ActiveRecord::Base
  attr_accessible :intro, :proposed_date, :proposed_location

  validates :intro, presence: true, length: { maximum: 190 }
  validates :requestor_id, presence: true
  validates :requestee_id, presence: true

    belongs_to :requestor, class_name: "User"
    belongs_to :requestee, class_name: "User"

    default_scope order: 'treatings.created_at DESC'

end

処理コントローラーの設定「requestee」に問題があります。

class TreatingsController < ApplicationController
    before_filter :signed_in_user

    def create
        requestee = ?
        requestor = current_user
        @received_treating = requestee.received_treatings.build(params[:treating])
        @received_treating.requestor = requestor

        if @received_treating.save
            flash[:success] = "Treating request sent!"
            redirect_to users_path
        else
            render 'static_pages/home'
        end
    end
end

私が置き換えようとした疑問符: User.find(params[:id])、現在の「users/show」ビューのユーザーが見つかることを期待していますが、次のエラーが発生します:

ID のないユーザーが見つかりませんでした

User.find(params[:treating][:requestee_id]) も試しましたが、これもうまくいきませんでした。何か案は?

ありがとう!

編集:

views/shared/_treating_form.html.erb (これはユーザー コントローラーで @received_treating を参照し、アクションを表示します):

<div class="field">
    <%= f.text_area :intro, placeholder: "Write your introduction here..." %>
</div>

<%= f.submit "Send", class: "btn btn-large btn-primary" %>

編集: 他のユーザー プロファイル ページの追加:

<% provide(:title, @user.name) %>
<div class="row">
    <aside class="span4">
        <section>
            <h1>
                <%= gravatar_for @user %>
                <%= @user.name %>
            </h1>
        </section>
        <% if signed_in? %>
            <section>
                    <%= render 'shared/treating_form' %>
            </section>
        <% end %>
    </aside>
    <div class="span8">
        <% if @user.received_treatings.any? %>
        <h3>Treating requests (<%= @user.received_treatings.count %> received)</h3>
        <ol class="treatings">
            <%= render @received_treatings %>
        </ol>
            <%= will_paginate @received_treatings %>
        <% end %>
    </div>
</div>
4

1 に答える 1

0

@user.idhidden_​​field を追加するだけでうまくいくと思います。

<%= f.hidden_field :requestee_id, :input_html => { :value => @user.id }
<div class="field">
    <%= f.text_area :intro, placeholder: "Write your introduction here..." %>
</div>

<%= f.submit "Send", class: "btn btn-large btn-primary" %>

フィールドに入力することもできます

<%= form_for @user.received_treatings.build do %>
  <%= f.hidden_field :requestee_id %>
  ....

コントローラーで

@received_treating = current_user.sent_treatings.build params[:treating]

これが機能するかどうかは疑問ですが、役立つはずです。

于 2012-08-03T22:25:00.760 に答える