0

プライベートメッセージシステムの作成に関するBrandonTilleyの指示に従っており、プライベートメッセージの受信者が渡される方法(チェックボックスからテキストボックスへ)を変更したいと考えています。

ビューで私はこれを持っています:

<%= f.label :to %><br />
<%= f.text_field :to, placeholder: "Recip...(separated by commas)" %>

整数の配列をコントローラーに渡すテキスト入力として入力を受け入れるにはどうすればよいですか?

追加の詳細:

全景:

<h1>New Conversation</h1>

<%= form_for(@conversation) do |f| %>
  <div>
  <%= f.label :to %><br />
  <%= f.text_field :to, placeholder: "Recip...(separated by commas)" %>
  </div>
  <br />
  <%= f.fields_for :conversation do |c| %>
    <div>
      <%= c.label :subject %>
      <%= c.text_field :subject %>
    </div>
    <%= c.fields_for :messages do |m| %>
    <div>
    <%= m.label :body %><br />
    <%= m.text_area :body %>
    </div>
    <% end %>
  <% end %>

  <%= f.submit %>
<% end %>

コントローラー内に私はこれを持っています:

def create
redirect_to users_path unless current_user
@conversation = UserConversation.new(params[:user_conversation])
@conversation.user = current_user
@conversation.conversation.messages.first.user = current_user
...

モデル内に私はこれを持っています:

  accepts_nested_attributes_for :conversation

  delegate :subject, :to => :conversation
  delegate :users, :to => :conversation

  attr_accessor :to
  *before_create :create_user_conversations*

private

def create_user_conversations
return if to.blank?

to.each do |recip|
  UserConversation.create :user_id => recip, :conversation => conversation
end
end
end

編集:新しいモデル:

def to
 to.map(&:user_id).join(", ") *stack too deep error*
end

def to=(user_ids)
  @to = user_ids.split(",").map do |recip|
  UserConversation.create :user_id => recip.strip, :conversation => conversation
end
4

2 に答える 2

1

Railsヘルパーは、任意の配列入力を自動的に処理するように設定されていません。

複数のチェックボックスを使用するか、ユーザー名のコンマ区切りリストであるテキスト入力を解析できます。あなたのモデルで

def to=(string)
  @to = User.where(:name => string.split(',')).select(:id).map(&:id)
end

より良いユーザーエクスペリエンスのために、tagsinputjqueryプラグインおよび/またはオートコンプリートを使用できます。

また、フォームを使用してこの同じオブジェクトを変更する場合、編集フォームに正しく事前入力するには、text_field入力の:valueオプションとしてコンマ区切りの文字列を再生成する必要があることにも注意してください。

<%= text_field_tag "user_conversation[to]", (@conversation.to || []).join(',') %>
于 2013-02-11T15:54:36.180 に答える
0

ビューで:

<%= f.label :to %><br />
<%= f.text_field :to, placeholder: "Recip...(separated by commas)" %>

モデル内:

attr_accessible :to
attr_accessor :to

before_create :create_user_conversations

private

to.split(",").each do |recip|
  UserConversation.create :user_id => recip, :conversation => conversation
end
于 2013-02-11T22:09:09.983 に答える