Создать несколько записей в рельсах с collection_select - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь создать систему обмена сообщениями, в которой пользователь может выбрать нескольких получателей, и я хотел бы, чтобы система создала сообщение для каждого из них. Пока что я получил контроллер как:

 def create

    @listmail = params[:recipient_ids]
    @listmail.each do |v|
      @message = current_user.messages.build(:title, :description, :user_id, recipient_id: v, :recipient_email, :tag_id, :industry, :strategy, :position, :aum)
      @message.save!
    end
    if @message.save
      redirect_to messages_path
    else
      render 'new'
    end
  end

Мнение:

<%= simple_form_for @message do |f| %>


  <%= f.collection_select(:recipient_id, User.all, :id, :full_name, {}, class: "selectpicker", title: "Choose recipent", multiple: true, data: { style: "form-control", size: "20", width: "100%" }) %>
  <%= f.input :title, label: "Message Title" %>
  <%= f.cktext_area :description, label: "Message Body" , :input_html => {:rows => 15} %>
  <%= f.button :submit, :class => 'btn-custom' %>
<% end %>

Но я получаю ошибку:

/Users/apulvard/Desktop/villas/app/controllers/messages_controller.rb:40: syntax error, unexpected ',', expecting => ...ipient_id: v, :recipient_email, :tag_id, :industry, :strateg... ... ^ /Users/apulvard/Desktop/villas/app/controllers/messages_controller.rb:54: syntax error, unexpected keyword_end, expecting end-of-input

Что я не очень хорошо, пожалуйста?

1 Ответ

0 голосов
/ 15 сентября 2018

/ Users / apulvard / Desktop / виллы / приложение / контроллеры / messages_controller.rb: 40: синтаксическая ошибка, неожиданное ',', ожидание => ... ipient_id: v, : receient_email,: tag_id,: отрасль,: стратегия ... ...

Вы передаете неверный хэш методу build. хэш должен быть комбинацией пар ключ-значение . Например

Не действует:

h = {:email, :name, user: 1}
SyntaxError: (irb):4: syntax error, unexpected ',', expecting =>
h = {:email, :name, user: 1}
            ^

Действительно:

h = {email:"", name: "", user: 1}
 => {:email=>"", :name=>"", :user=>1}

Решение:

Вы должны изменить свой хэш на пары ключ-значение с помощью params, которые идут к методу create. Обычно это было до Rails 4. В Rails4 были введены сильные параметры . Если вы используете Rails 4+, вы должны определить сильные параметры примерно так:

def create
  @listmail = params[:recipient_ids]
  @listmail.each do |v|
    @message = current_user.messages.build(message_params)
    @message.recipient_id = v
    @message.save!
  end
  if @message.save
    redirect_to messages_path
  else
    render 'new'
  end
end

private
def message_params
  params.require(:message).permit(:title, :description, :user_id, :recipient_id, :recipient_email, :tag_id, :industry, :strategy, :position, :aum)
end

Более того,

@listmail = params[:recipient_ids] 

должно быть

@listmail = params[:message][:recipient_id]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...