Я новичок в ruby на рельсах и буду признателен за любую помощь. Это приложение предназначено, чтобы помочь студентам получить результаты своего запроса sql. Так что я ожидаю ввода sql от студентов. Я пытаюсь "выбрать * из сообщений, где uid <4" для конкретного c Студента. То есть он может видеть только некоторые кортежи со своим student_id. И контроллер приложения выглядит следующим образом (где текущий пользователь - информация для входа в систему этого студента): </p>
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_action :ensure_login
helper_method :logged_in?, :current_user
def index
end
protected
def ensure_login
# Always go to login page unless session contains
# reviewer_id
redirect_to login_path unless session[:student_id]
end
def logged_in?
session[:student_id] # nil is false
end
def current_user
@current_user ||= Student.find(session[:student_id])
end
end
В соответствующем контроллере я написал что-то вроде этого, пытаясь найти только записи current_user, но это не удалось (он выдает все кортежи с uid <4 независимо от того, какой это student_id): </p>
def findit
#render json: { success: "It works", operator: params[:operator].inspect,condition: params[:condition].inspect,table: params[:table].inspect}
@results = current_user.posts.find_by_sql(params[:sql])
render json: { html: render_to_string(:template => 'all/findit') }
#render json: { c: @columns}
end
Но работает следующий код в posts_controller.rb. У него есть только записи для этого конкретного c студента. Так что же не так с findit?
def index
@posts = current_user.posts.all
end
Схема: (И есть модель сеанса тоже)
ActiveRecord::Schema.define(version: 20200325201224) do
create_table "posts", force: :cascade do |t|
t.string "title"
t.text "content"
t.integer "uid"
t.integer "student_id"
end
create_table "students", force: :cascade do |t|
t.string "name"
t.string "password_digest"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "users", force: :cascade do |t|
t.string "name"
t.integer "year"
t.integer "uid"
t.integer "student_id"
end
end
Большое спасибо за помощь !!!!