Использование MVC в Rails правильно для передачи данных в базу данных с помощью form_for - PullRequest
1 голос
/ 19 июля 2011

Я новичок в Ruby и Rails и создаю веб-приложение, в котором мне нужно отправить данные в свою базу данных с помощью form_for.Я знаю, что мне не хватает ключевой концепции логики Rails MVC, и мне нужна помощь, чтобы сократить разрыв.У меня есть объект колледжа, у которого есть сообщения.Я пытаюсь передать данные из form_for, но также включить данные, которые можно извлечь из URL с помощью хэша params.Вот мой код:

Posts_Controller.rb:

class PostsController < ApplicationController

def new
 @college = College.find(params[:college_id])
 @post = Post.new(:college_id => @college.id)
 @title = "Submit Post"
end

def create
 @post = Post.new(params[:post])
 if @post.save
 redirect_to root_path, :flash => { :success => "Post Submitted Successfully!" }
else
  @title = "Submit Post"
  render 'new'
end
end....

rout.rb:

MyApp::Application.routes.draw do
get "sessions/new"

resources :posts
resources :smacks
resources :redemptions
resources :users do
  resources :microposts, :only => [:index]
  member do
    get :following, :followers
  end
end
resources :sessions, :only => [:new, :create, :destroy]
resources :microposts, :only => [:create, :destroy]
resources :relationships, :only => [:create, :destroy]
resources :colleges, :only => [:new, :create, :index, :show] do
  resources :posts
  resources :smacks
  resources :redemptions
end

match '/signup', :to => 'users#new'
match '/signin', :to => 'sessions#new'
match '/signout', :to => 'sessions#destroy'
match '/contact', :to => 'pages#contact'
match '/about', :to => 'pages#about'
match '/help', :to => 'pages#help'

Просмотр нового сообщения, new.html.erb:

<h1>Submit a <%= @college.name %> Post</h1>
<%= form_for @post do |f| %> 
<%= render 'fields', :f => f %>
<div class="actions">
<%= f.submit "Submit" %> 
</div>
<% end %>

Файл 'fields' вызывается из new.html.erb:

<%= render 'shared/error_messages', :object => f.object %> 

<div class="field">
<%= f.label :type %><br />
<%= f.text_field :type %> 
</div>
<div class="field"> <%= f.label :title %><br /> <%= f.text_field :title %>
</div> 
<div class="field">
<%= f.label :content_type %><br />
<%= f.text_field :content_type %> 
</div>
<div class="field">
<%= f.label :content %><br />
<%= f.text_field :content %> 
</div>

Форма отправляется без проблем, но она только публикует поля, включенные в form_for.Я хочу передать больше данных, таких как College_id, который находится в URL страницы new_post.Вот что показывает URL на новой странице: «http://localhost:3000/colleges/1/posts/new". Я хочу передать« 1 »из поля URL в поле College_id в моей записи db. Дайте мне знать, если кто-то может помочь, и дайте мне знать, если мне нужно опубликоватьбольше код.

Спасибо!

1 Ответ

0 голосов
/ 19 июля 2011

Один из способов сделать это - добавить <%= f.hidden_field(:college_id, @college.id) %> к вашей форме. Это должно заполнить вашу форму с правильным идентификатором, и тогда я считаю, что ваша модель для публикации имеет свойство belongs_to :college.

Лично я бы не рекомендовал такой способ обработки вложенных объектов. Посмотрите следующую веб-трансляцию и измените реализацию в соответствии с вашими потребностями: http://railscasts.com/episodes/196-nested-model-form-part-1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...