Сделать кнопку изменить поле логической модели в рельсах [дубликат]

Это действительно не относится к вашим личным скриптам, но поскольку вы цитируете beets , обратите внимание, что также можно автоматизировать это действие, когда вы распространяете свои пакеты, благодаря setuptools entry_point . Поэтому, если вы распространяете пакет, такой как myModule , и хотите, чтобы функция main_function () была доступна, набрав mymodulescript в консоли, вы, вероятно, добавили бы что-то вроде этого в файле setup.py :

  setup (# ваши другие аргументы .. entry_points = {'console_scripts': ['mymodulescript = myModule: main_function'  ]})  

1
задан winston 2 February 2014 в 23:55
поделиться

3 ответа

Вам нужна форма для этого, а не только кнопка

<%= form_tag add_school_user_path(@user), method: put do -%>
  <%= hidden_field_tag :school_id, @school.id -%>
  <%= submit_tag 'Add school' -%>
<%- end -%>

, вы не указали код контекста, возможно, @user и @school не являются настоящими именами переменных, но вы можете получить идея из этого

4
ответ дан arieljuod 16 August 2018 в 11:22
поделиться
  • 1
    Спасибо за это! Это получилось великолепно. Прохождение в id школы было намного легче сделать как форма со скрытым полем. – winston 3 February 2014 в 05:39

Это старый Q, но, тем не менее, для полноты. Вам необязательно нужна форма для простого формального представления с помощью кнопки / ссылки. Вы можете полагаться на jquery-ujs и data-params .

<%= link_to add_school_user_path(@user), class: "btn btn-xs btn-primary",
  title: "Add school",
  data: {remote: true, confirm: 'Are you sure?', method: 'put',
    params: {user: {schoold_id: @school.id}}} do %>
      <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
      Add school&hellip;
<% end %>

Обратите внимание, что вы хотите иметь метод school_params в своем контроллер, подобный params.require(:user).permit(:school_id)

0
ответ дан mlt 16 August 2018 в 11:22
поделиться

Вам нужно передать весь хеш в вызов .update_attributes.

Предпочтительно вы поместите school_id внутри user, чтобы он выглядел как

# params[:user] = { school_id: 1 }
@user.update_attributes(params[:user])

Или вы могли бы вручную ввести идентификатор школы

@user.update_attributes(school_id: params[:school_id])

Или, еще лучше, подтвердите связь

@user.school = School.find(params[:school_id]

Путь, который вы хотите, -

user_add_school_path(@user, school_id: 1)
1
ответ дан OneChillDude 16 August 2018 в 11:22
поделиться
  • 1
    Спасибо за ответ! Как бы выглядел код кнопки? <%= button_to "Add School", add_school_user_path(:user), :method => "put" %>, похоже, не работает. Разве я не хочу проходить: пользователь? Не знаю, почему это не работает. – winston 2 February 2014 в 19:23
  • 2
    Загрузите часть файла ваших маршрутов, определяющую add_school_user_path, вы, вероятно, хотите что-то вроде add_school_user_path(id: 1, school_id: 1) – OneChillDude 2 February 2014 в 19:26
  • 3
    Обновлено. Еще раз спасибо! – winston 2 February 2014 в 19:31
  • 4
    Обновленный путь дает мне ошибку маршрутизации No route matches {:action=>"add_school", :controller=>"users", :school_id=>1, :id=>nil}. Не уверен, почему он не может найти идентификатор – winston 2 February 2014 в 23:53
  • 5
    Затем включите идентификатор в хэш х аргументов: school_id: 1, id: 1 – OneChillDude 3 February 2014 в 01:31